diff --git a/versioned_docs/version-v1.1.0/README.md b/versioned_docs/version-v1.1.0/README.md deleted file mode 100644 index fa0a5c958..000000000 --- a/versioned_docs/version-v1.1.0/README.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -sidebar_position: 1 -sidebar_label: Introduction ---- - -# The Zed Project - -Zed offers a new approach to data that makes it easier to manipulate and manage -your data. - -With Zed's new [super-structured data model](formats/README.md#2-zed-a-super-structured-pattern), -messy JSON data can easily be given the fully-typed precision of relational tables -without giving up JSON's uncanny ability to represent eclectic data. - -## Getting Started - -Trying out Zed is easy: just [install](install.md) the command-line tool -[`zq`](commands/zq.md) and run through the [zq tutorial](tutorials/zq.md). - -`zq` is a lot like [`jq`](https://stedolan.github.io/jq/) -but is built from the ground up as a search and analytics engine based -on the [Zed data model](formats/zed.md). Since Zed data is a -proper superset of JSON, `zq` also works natively with JSON. - -While `zq` and the Zed data formats are production quality, the Zed project's -[Zed data lake](commands/zed.md) is a bit [earlier in development](commands/zed.md#status). - -For a non-technical user, Zed is as easy to use as web search -while for a technical user, Zed exposes its technical underpinnings -in a gradual slope, providing as much detail as desired, -packaged up in the easy-to-understand -[ZSON data format](formats/zson.md) and -[Zed language](language/README.md). - -## Terminology - -"Zed" is an umbrella term that describes -a number of different elements of the system: -* The [Zed data model](formats/zed.md) is the abstract definition of the data types and semantics -that underlie the Zed formats. -* The [Zed formats](formats/README.md) are a family of -[sequential (ZNG)](formats/zng.md), [columnar (ZST)](formats/zst.md), -and [human-readable (ZSON)](formats/zson.md) formats that all adhere to the -same abstract Zed data model. -* A [Zed lake](commands/zed.md) is a collection of optionally-indexed Zed data stored -across one or more [data pools](commands/zed.md#14-data-pools) with ACID commit semantics and -accessed via a [Git](https://git-scm.com/)-like API. -* The [Zed language](language/README.md) is the system's dataflow language for performing -queries, searches, analytics, transformations, or any of the above combined together. -* A [Zed query](language/overview.md#1-introduction) is a Zed script that performs -search and/or analytics. -* A [Zed shaper](language/overview.md#9-shaping) is a Zed script that performs -data transformation to _shape_ -the input data into the desired set of organizing Zed data types called "shapes", -which are traditionally called _schemas_ in relational systems but are -much more flexible in the Zed system. - -## Digging Deeper - -The [Zed language documentation](language/README.md) -is the best way to learn about `zq` in depth. -All of its examples use `zq` commands run on the command line. -Run `zq -h` for a list of command options and online help. - -The [Zed Lake documentation](commands/zed.md) -is the best way to learn about `zed`. -All of its examples use `zed` commands run on the command line. -Run `zed -h` or `-h` with any subcommand for a list of command options -and online help. The same language query that works for `zq` operating -on local files or streams also works for `zed query` operating on a lake. - -## Design Philosophy - -The design philosophy for Zed is based on composable building blocks -built from self-describing data structures. Everything in a Zed lake -is built from Zed data and each system component can be run and tested in isolation. - -Since Zed data is self-describing, this approach makes stream composition -very easy. Data from a Zed query can trivially be piped to a local -instance of `zq` by feeding the resulting Zed stream to stdin of `zq`, for example, -``` -zed query "from pool | ...remote query..." | zq "...local query..." - -``` -There is no need to configure the Zed entities with schema information -like [protobuf configs](https://developers.google.com/protocol-buffers/docs/proto3) -or connections to -[schema registries](https://docs.confluent.io/platform/current/schema-registry/index.html). - -A Zed lake is completely self-contained, requiring no auxiliary databases -(like the [Hive metastore](https://cwiki.apache.org/confluence/display/hive/design)) -or other third-party services to interpret the lake data. -Once copied, a new service can be instantiated by pointing a `zed serve` -at the copy of the lake. - -Functionality like indexing, data compaction, and retention are all -API-driven. - -Bite-sized components are unified by the Zed data, usually in the ZNG format: -* All lake meta-data is available via meta-queries. -* All like operations available through the service API are also available -directly via the `zed` command. -* Search indexes and aggregate partials are all just ZNG files and you can -learn about the Zed lake by simply running `zq` on the various ZNG files -in a cloud store. -* Lake management is agent-driven through the API. For example, instead of complex policies -like data compaction being implemented in the core with some fixed set of -algorithms and policies, an agent can simply hit the API to obtain the meta-data -of the objects in the lake, analyze the objects (e.g., looking for too much -key space overlap) and issue API commands to merge overlapping objects -and delete the old fragmented objects, all with the transactional consistency -of the commit log. -* Components are easily tested and debugged in isolation. diff --git a/versioned_docs/version-v1.1.0/commands/README.md b/versioned_docs/version-v1.1.0/commands/README.md deleted file mode 100644 index 66f098dde..000000000 --- a/versioned_docs/version-v1.1.0/commands/README.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -sidebar_position: 3 -sidebar_label: Commands ---- - -# Command Tooling - -The Zed system is managed and queried with the [`zed` command](zed.md), -which is organized into numerous subcommands like the familiar command patterns -of `docker` or `kubectrl`. -Built-in help for the `zed` command and all of its subcommands is always -accessible with the `-h` flag. - -The [`zq` command](zq.md) offers a convenient slice of `zed` for running -stand-alone, command-line queries on inputs from files, HTTP URLs, or S3. -`zq` is like [`jq`](https://stedolan.github.io/jq/) but is easier and faster, utilizes the richer -Zed data model, and interoperates with a number of other formats beyond JSON. -If you don't need a Zed lake, you can install just the -slimmer `zq` command which omits lake support and dev tools. - -`zq` is always installed alongside `zed`. You might find yourself mixing and -matching `zed` lake queries with `zq` local queries and stitching them -all together with Unix pipelines. diff --git a/versioned_docs/version-v1.1.0/commands/_category_.yaml b/versioned_docs/version-v1.1.0/commands/_category_.yaml deleted file mode 100644 index e5c770bad..000000000 --- a/versioned_docs/version-v1.1.0/commands/_category_.yaml +++ /dev/null @@ -1,2 +0,0 @@ -position: 3 -label: Commands diff --git a/versioned_docs/version-v1.1.0/commands/zed.md b/versioned_docs/version-v1.1.0/commands/zed.md deleted file mode 100644 index fbc38552b..000000000 --- a/versioned_docs/version-v1.1.0/commands/zed.md +++ /dev/null @@ -1,883 +0,0 @@ ---- -sidebar_position: 1 -sidebar_label: zed ---- - -# zed - -> **TL;DR** `zed` is a command-line tool to manage and query Zed data lakes. -> You can import data from a variety of formats and `zed` will automatically -> commit the data in the Zed data model's [super-structured](../formats/README.md) -> format, providing full fidelity of the original format and the ability -> to reconstruct the original data without loss of information. -> -> Zed lakes provide an easy-to-use substrate for data discovery, preparation, -> and transformation as well as serving as a queryable and searchable store -> for super-structured data both for online and archive use cases. - -## _Status_ - -> While [`zq`](zq.md) and the [Zed formats](../formats/README.md) -> are production quality, the Zed lake is still fairly early in development -> and alpha quality. -> That said, Zed lakes can be utilized quite effectively at small scale, -> or at larger scales when scripted automation -> is deployed to manage the lake's data layout and create any needed search indexes -> via the [lake API](../lake/api.md). -> -> Enhanced scalability with self-tuning configuration is under development. - -## 1. The Lake Model - -A Zed lake is a cloud-native arrangement of data, optimized for search, -analytics, ETL, data discovery, and data preparation -at scale based on data represented in accordance -with the [Zed data model](../formats/zed.md). - -A lake is organized into a collection of data pools forming a single -administrative domain. The current implementation supports -ACID append and delete semantics at the commit level while -we have plans to support CRUD updates at the primary-key level -in the near future. - -The semantics of a Zed lake loosely follows the nomenclature and -design patterns of [`git`](https://git-scm.com/). In this approach, -* a _lake_ is like a GitHub organization, -* a _pool_ is like a `git` repository, -* a _branch_ of a _pool_ is like a `git` branch, -* the _use_ command is like a `git checkout`, and -* the _load_ command is like a `git add/commit/push`. - -A core theme of the Zed lake design is _ergonomics_. Given the Git metaphor, -our goal here is that the Zed lake tooling be as easy and familiar as Git is -to a technical user. - -Since Zed lakes are built around the Zed data model, -getting different kinds of data into and out of a lake is easy. -There is no need to define schemas or tables and then fit -semi-structured data into schemas before loading data into a lake. -And because Zed supports a large family of formats and the load endpoint -automatically detects most formats, it's easy to just load data into a lake -without thinking about how to convert it into the right format. - -### 1.1 CLI-First Approach - -The Zed project has taken a _CLI-first approach_ to designing and implementing -the system. Any time a new piece of functionality is added to the lake, -it is first implemented as a `zed` command. This is particularly convenient -for testing and continuous integration as well as providing intuitive, -bite-sized chunks for learning how the system works and how the different -components come together. - -While the CLI-first approach provides these benefits, -all of the functionality is also exposed through [an API](../lake/api.md) to -a Zed service. Many use cases involve an application like -[Brim](https://github.com/brimdata/brim) or a -programming environment like Python/Pandas interacting -with the service API in place of direct use with the `zed` command. - -### 1.2 Storage Layer - -The Zed lake storage model is designed to leverage modern cloud object stores -and separates compute from storage. - -A lake is entirely defined by a collection of cloud objects stored -at a configured object-key prefix. This prefix is called the _storage path_. -All of the meta-data describing the data pools, branches, commit history, -and so forth is stored as cloud objects inside of the lake. There is no need -to set up and manage an auxiliary metadata store. - -Data is arranged in a lake as a set of pools, which are comprised of one -or more branches, which consist of a sequence of data commit objects -that point to cloud data objects. - -Cloud objects and commits are immutable and named with globally unique IDs, -based on the [KSUIDs](https://github.com/segmentio/ksuid), and many -commands may reference various lake entities by their ID, e.g., -* _Pool ID_ - the KSUID of a pool -* _Commit object ID_ - the KSUID of a commit object -* _Data object ID_ - the KSUID of a committed data object -* _Index rule ID_ - the KSUID of an index rule -* _Index object ID_ - the KSUID of an index object relative to a data object - -Data is added and deleted from the lake only with new commits that -are implemented in a transactionally consistent fashion. Thus, each -commit object (identified by its globally-unique ID) provides a completely -consistent view of an arbitrarily large amount of committed data -at a specific point in time. - -While this commit model may sound heavyweight, excellent live ingest performance -can be achieved by micro-batching commits. - -Because the Zed lake represents all state transitions with immutable objects, -the caching of any cloud object (or byte ranges of cloud objects) -is easy and effective since a cached object is never invalid. -This design makes backup/restore, data migration, archive, and -replication easy to support and deploy. - -The cloud objects that comprise a lake, e.g., data objects, -commit history, transaction journals, search indexes, partial aggregations, etc., -are stored as Zed data, i.e., either as [row-based ZNG](../formats/zng.md) -or [columnar ZST](../formats/zst.md). -This makes introspection of the lake structure straightforward as many key -lake data structures can be queried with metadata queries and presented -to a client as Zed data for further processing by downstream tooling. - -Zed's implementation also includes a storage abstraction that maps the cloud object -model onto a file system so that Zed lakes can also be deployed on standard file systems. - -### 1.3 Zed Command Personalities - -The `zed` command provides a single command-line interface to Zed lakes, but -different personalities are taken on by `zed` depending on the particular -sub-command executed and the disposition of its `-lake` option -(which defaults to the value of `ZED_LAKE` environment variable or, -if `ZED_LAKE` is not set, to the client personality `https://localhost:9867`). - -To this end, `zed` can take on one of three personalities: -* _Direct Access_ - When the lake is a storage path (`file` or `s3` URI), -then the `zed` commands (except for `serve`) all operate directly on the -lake located at that path. -* _Client Personality_ - When the lake is an HTTP or HTTPS URL, then the -lake is presumed to be a Zed lake service endpoint and the client -commands are directed to the service managing the lake. -* _Server Personality_ - When the `zed serve` command is executed, then -the personality is always the server personality and the lake must be -a storage path. This command initiates a continuous server process -that serves client requests for the lake at the configured storage path. - -Note that a storage path on the file system may be specified either as -a fully qualified file URI of the form `file://` or be a standard -file system path, relative or absolute, e.g., `/lakes/test`. - -Concurrent access to any Zed lake storage, of course, preserves -data consistency. You can run multiple `zed serve` processes while also -running any `zed` lake command all pointing at the same storage endpoint -and the lake's data footprint will always remain consistent as the endpoints -all adhere to the consistency semantics of the Zed lake. - -> One caveat here: data consistency is not fully implemented yet for -> the S3 endpoint so only single-node access to S3 is available right now, -> though support for multi-node access is forthcoming. -> For a shared file system, the close-to-open cache consistency -> semantics of NFS should provide the necessary consistency guarantees needed by -> a Zed lake though this has not been tested. Multi-process, single-node -> access to a local file system has been thoroughly tested and should be -> deemed reliable, i.e., you can run a direct-access instance of `zed` alongside -> a server instance of `zed` on the same file system and data consistency will -> be maintained. - -### 1.4 Data Pools - -A lake is made up of _data pools_, which are like "collections" in NoSQL -document stores. Pools may have one or more branches and every pool always -has a branch called `main`. - -A pool is created with the [create command](#23-create) -and a branch of a pool is created with the [branch command](#22-branch). - -A pool name can be any valid UTF-8 string and is allocated a unique ID -when created. The pool can be referred to by its name or by its ID. -A pool may be renamed but the unique ID is always fixed. - -### 1.4.1 Commit Objects - -Data is added into a pool in atomic units called _commit objects_. - -Each commit object is assigned a global ID. -Similar to Git, Zed commit objects are arranged into a tree and -represent the entire commit history of the lake. - -> Technically speaking, Git can merge from multiple parents and thus -Git commits form a directed acyclic graph instead of a tree; -Zed does not currently support multiple parents in the commit object history. - -A branch is simply a named pointer to a commit object in the Zed lake -and like a pool, a branch name can be any valid UTF-8 string. -Consistent updates to a branch are made by writing a new commit object that -points to the previous tip of the branch and updating the branch to point at -the new commit object. This update may be made with a transaction constraint -(e.g., requiring that the previous branch tip is the same as the -commit object's parent); if the constraint is violated, then the transaction -is aborted. - -The _working branch_ of a pool may be selected on any command with the `-use` option -or may be persisted across commands with the [use command](#214-use) so that -`-use` does not have to be specified on each command-line. For interactive -workflows, the `use` command is convenient but for automated workflows -in scripts, it is good practice to explicitly specify the branch in each -command invocation with the `-use` option. - -### 1.4.2 Commitish - -Many `zed` commands operate with respect to a commit object. -While commit objects are always referenceable by their commit ID, it is also convenient -to refer to the commit object at the tip of a branch. - -The entity that represents either a commit ID or a branch is called a _commitish_. -A commitish is always relative to the pool and has the form: -* `@` or -* `@` - -where `` is a pool name or pool ID, `` is a commit object ID, -and `` is a branch name. - -In particular, the working branch set by the [use command](#214-use) is a commitish. - -A commitish may be abbreviated in several ways where the missing detail is -obtained from the working-branch commitish, e.g., -* `` - When just a pool name is given, then the comittish is assumed to be -`@main`. -* `@` or ``- When an ID is given (optionally with the `@` prefix), then the commitish is assumed to be `@` where `` is obtained from the working-branch commitish. -* `@` - When a branch name is given with the `@` prefix, then the commitish is assumed to be `@` where `` is obtained from the working-branch commitish. - -An argument to a command that takes a commit object is called a _commitish_ -since it can be expressed as a branch or as a commit ID. - -### 1.4.3 Pool Key - -Each data pool is organized according to its configured _pool key_, -which is the sort key for all data stored in the lake. Different data pools -can have different pool keys but all of the data in a pool must have the same -pool key. - -As pool data is often comprised of Zed records (analogous to JSON objects), -the pool key is typically a field of the stored records. -When pool data is not structured as records/objects (e.g., scalar or arrays or other -non-record types), then the pool key would typically be configured -as the [special value `this`](../language/overview.md#23-the-special-value-this). - -Data can be efficiently scanned via ranges of values conforming to the pool key. - -> The pool key will also serve as the primary key for the forthcoming -> CRUD semantics. - -A pool also has a configured sort order, either ascending or descending -and data is organized in the pool in accordance with this order. -Data scans may be either ascending or descending, and scans that -follow the configured order are generally more efficient than -scans that run in the opposing order. - -Scans may also be range-limited but unordered. - -Any data loaded into a pool that lacks the pool key is presumed -to have a null value with regard to range scans. If large amounts -of such "keyless data" are loaded into a pool, the ability to do -range scans over such data is impaired. - -### 1.5 Time Travel - -Because commits are transactional and immutable, a query -sees its entire data scan as a fixed "snapshot" with respect to the -commit history. In fact, Zed's [from operator](../language/operators/from.md) -allows a commit object to be specified with the `@` suffix to a -pool reference, e.g., -``` -zed query 'from logs@1tRxi7zjT7oKxCBwwZ0rbaiLRxb | ...' -``` -In this way, a query can time-travel through the commit history. As long as the -underlying data has not been deleted, arbitrarily old snapshots of the Zed -lake can be easily queried. - -If a writer commits data after and while a reader is scanning, then the reader -does not see the new data since it's scanning the snapshot that existed -before these new writes occurred. - -Also, arbitrary metadata can be committed to the log as described below, -e.g., to associate index objects or derived analytics to a specific -journal commit point potentially across different data pools in -a transactionally consistent fashion. - -While time travel through commit history provides one means to explore -past snapshots of the commit history, another means is to use a timestamp. -Because the entire history of branch updates is stored in a transaction journal -and each entry contains a timestamp, branch references can be easily -navigated by time. For example, a list of branches of a pool's past -can be created by scanning the internal "pools log" and stopping at the largest -timestamp less than or equal to the desired timestamp. Then using that -historical snapshot of the pools, a branch can be located within the pool -using that pool's "branches log" in a similar fashion, then its corresponding -commit object can be used to construct the data of that branch at that -past point in time. - - > Note that time travel using timestamps is a forthcoming feature. - -### 1.6 Search Indexes - -Unlike traditional indexing systems based on an inverted-keyword index, -indexing in Zed is decentralized and incremental. Instead of rolling up -index data structures across many data objects, a Zed lake stores a small -amount of index state for each data object. Moreover, the design relies on -indexes only to enhance performance, not to implement the data semantics. -Thus, indexes need not exist to operate a lake and can be incrementally added or -deleted without large indexing jobs needing to rebuild a monolithic index -after each configuration change. - -To optimize pool scans, the lake design relies on the well-known pruning -concept to skip any data object that the planner determines can be skipped -based on one or more indexes of that object. For example, if an object -has been indexed for field "foo" and the query -``` -foo == "bar" | ... -``` -is run, then the scan will consult the "foo" index and skip the data object -if the value "bar" is not in that index. - -Also, each data object is broken up into seekable chunks and the chunk location -of each index value is stored in the index so that only parts of large -data objects need to be scanned based on this information. - -This approach works well for "needle in the haystack"-style searches. When -a search hits every object, this style of indexing would not eliminate any -objects and thus does not help nor does any such indexing scheme. - -While an individual index lookup involves latency to cloud storage to lookup -a key in each index, each lookup is cheap and involves a small amount of data -and the lookups can all be run in parallel, even from a single node, so -the scan schedule can be quickly computed in a small number of round-trips -(that navigate very wide B-trees) to cloud object storage or to a cache -of cloud objects. - -> Future plans for indexing include full-text keyword indexing and -> type-based indexing (e.g., index all values that are IP addresses -> including values inside arrays, sets, and sub-records). - -#### 1.6.1 Index Rules - -Indexes are created and managed with one or more _index rules_. - -While you can simply create rules and run `zed index update` to ensure -that indexes are all up to date with committed data, the process here -involves indexing each data object and storing its index object -as another cloud object in the data pool. Once an index is successfully -computed, the binding between a data object and its index is transactionally -committed to its branch so that the query planner always has a consistent -view of the index relative to the data. - -When data is merged from one branch to another, the indexes are retained -and need not be recomputed. - -Rules are organized into groups by name and defined at the lake level -so that any named group of rules can be applied to data objects from -any pool. The group name provides no meaning beyond a reference to -a set of index rules at any given time. - -When rules are created or changed, indexes may be updated simply by running -the [index update command](#265-index-update). - -#### 1.6.2 Indexing Workflows - -Indexes are all created and managed explicitly via the `zed index` commands -and equivalent API endpoints. It is the responsibility of external agents -to create indexes that can be utilized by the service. This design allows -the indexing system to be scaled out and run independently from the ingest -and query functions and be tailored to diverse workloads, e.g., the needs of -a real-time log search use case are very different from those of an ETL use -case but this design allows different workloads like these to be custom tuned. - -> Agents to perform automatic indexing are under development. - -## 2. Zed Commands - -The `zed` command is structured as a primary command -consististing of a large number of interrelated sub-commands, similar to the -[docker](https://docs.docker.com/engine/reference/commandline/cli/) -or [kubectl](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands) -commands. - -The following sections describe each of the available commands, but built-in -help is also available: -* `zed -h` with no args displays a list of zed commands. -* `zed command -h`, where `command` is a sub-command, displays help -for that sub-command. -* `zed command sub-command -h` displays help for a sub-command of a -sub-command and so forth. - -### 2.1 Auth -``` -zed auth login|logout|method|verify -``` -Access to a Zed lake can be secured with [Auth0 authentication](https://auth0.com/). -Please reach out to us on our [Brim community Slack](https://www.brimdata.io/join-slack/) -if you'd like help setting this up and trying it out. - -### 2.2 Branch -``` -zed branch [options] [name] -``` -The `branch` command creates a branch with the name `name` that points -to the tip of the working branch or, if the `name` argument is not provided, -lists the existing branches of the selected pool. - -For example, this branch command -``` -zed branch -use logs@main staging -``` -creates a new branch called "staging" in pool "logs", which points to -the same commit object as the "main" branch. Once created, commits -to the "staging" branch will be added to the commit history without -affecting the "main" branch and each branch can be queried independently -at any time. - -Supposing the `main` branch of `logs` was already the working branch, -then you could create the new branch called "staging" by simply saying -``` -zed branch staging -``` -Likewise, you can delete a branch with `-d`: -``` -zed branch -d staging -``` -and list the branches as follows: -``` -zed branch -``` - -### 2.3 Create -``` -zed create [-orderby key[,key...][:asc|:desc]] -``` -The `create` command creates a new data pool with the given name, -which may be any valid UTF-8 string. - -The `-orderby` option indicates the pool key that is used to sort -the data in lake, which may be in ascending or descending order. - -If a pool key is not specified, then it defaults to -the [special value `this`](../language/overview.md#23-the-special-value-this). - -A newly created pool is initialized with a branch called `main`. - -> Zed lakes can be used without thinking about branches. When referencing a pool without -> a branch, the tooling presumes the "main" branch as the default, and everything -> can be done on main without having to think about branching. - -### 2.4 Delete -``` -zed delete [options] [...] -zed delete [options] -where -``` -The `delete` command removes one or more data objects indicated by their ID from a pool. -This command -simply removes the data from the branch without actually deleting the -underlying data objects thereby allowing time travel to work in the face -of deletes. - -If the `-where` flag is specified, delete will remove all values for which the -provided filter expression is true. The filter expression must be a single comparison -against the pool key using <, <=, > or >= (e.g., `-where 'ts <= now() - 3h'`). - -> A vacuum command to delete permanently from a pool is under development. - -### 2.5 Drop -``` -zed drop [options] | -``` -The `drop` command deletes a pool and all of its constituent data. -As this is a DANGER ZONE command, you must confirm that you want to delete -the pool to proceed. The `-f` option can be used to force the deletion -without confirmation. - -### 2.6 Index -``` -zed index [options] apply|create|drop|ls|update -``` -The `index` command has a number of sub-commands to create, manage, and delete -indexing rules and apply these rules to create indexes of data objects. - -#### 2.6.1 Index Apply -``` -zed index apply [options ] [, ...] -``` -The `index apply` command applies the indexing rules defined by the -index name `` to one or more data object IDs given by the -`` arguments to create new index objects. - -The new objects are recorded in a new commit object in the working branch -(or in the branch indicated with the `-use` option.) The options used to -set metadata in the [load command](#28-load) may also be specified here. - -#### 2.6.2 Index Create -``` -zed index create field -``` -The `index create` command creates a field rule under the group of -rules called `` for the field referenced by ``, which should -be an identifier or dotted-field path. - -For example, -``` -zed index create IndexGroupExample field foo -``` -adds a field rule for field `foo` to the index group named `IndexGroupExample`. -This rule can then be applied to a data object having a given `` -in a pool, e.g., -``` -zed index apply -use logs@main IndexGroupExample -``` -The index is created and transactionally added to the working branch's -commit history so it becomes available to the query optimizer. - -#### 2.6.3 Index Drop -``` -zed index drop [ ...] -``` -The `index drop` command deletes one or more index rules specified by ``. -Once deleted, no more indexes will be created for that rule but the underlying -indexes are not actually deleted from the lake. - -> Commands to delete the underlying indexes and data from a lake are -> under development. - -#### 2.6.4 Index Ls -``` -zed index ls [options] -``` -The `index ls` command lists the indexes organized by groups that are -configured in the lake. - -#### 2.6.5 Index Update -``` -zed index update [rule [rule ...]] -``` -The `index update` command creates index objects for all data objects -in the working branch (or the branch specified by `-use`) -that do not have an index object for the list of index rules given. - -If no index rules are given, the update is performed for all index rules. - -### 2.7 Init -``` -zed init [path] -``` -A new lake is initialized with the `init` command. The `path` argument -is a [storage path](#12-storage-layer) and is optional. If not present, -the path is taken from the `ZED_LAKE` environment variable, which must be defined. - -If the lake already exists, `init` reports an error and does nothing. - -Otherwise, the `init` command writes the initial cloud objects to the -storage path to create a new, empty lake at the specified path. - -### 2.8 Load -``` -zed load [options] input [input ...] -``` -The `load` command commits new data to a branch of a pool. - -Run `zed load -h` for a list of command-line options. - -Note that there is no need to define a schema or insert data into -a "table" as all Zed data is _self describing_ and can be queried in a -schema-agnostic fashion. Data of any _shape_ can be stored in any pool -and arbitrary data _shapes_ can coexist side by side. - -As with `zq`, -the [input arguments](zq.md#1-usage) can be in -any [supported format](zq.md#2-input-formats) and -the input format is auto-detected if `-i` is not provided. Likewise, -the inputs may be URLs, in which case, the `load` command streams -the data from a Web server or S3 and into the lake. - -When data is loaded, it is broken up into objects of a target size determined -by the pool's `threshold` parameter (which defaults 500MiB but can be configured -when the pool is created). Each object is sorted by the pool key but -a sequence of objects is not guaranteed to be globally sorted. When lots -of small or unsorted commits occur, data can be fragmented impacting performance. - -> Note that data is easily compacted by reading from a fragmented pool and writing -> it back to a target pool so that it is globally sorted and compacted into -> contiguous large objects. We will soon introduce a compaction feature that -> does this automatically inside of a pool and can either be run manually or -> configured to run automatically by the server. - -For example, this command -``` -zed load sample1.json sample2.zng sample3.zson -``` -loads files of varying formats in a single commit to the working branch. - -Parquet and ZST formats are not auto-detected so you must currently -specify `-i` with these formats, e.g., -``` -zed load -i parquet sample4.parquet -zed load -i zst sample5.zst -``` -An alternative branch may be specified with a branch reference with the -`-use` option, i.e., `@`. Supposing a branch -called `live` existed, data can be committed into this branch as follows: -``` -zed load -use logs@live sample.zng -``` -Or, as mentioned above, you can set the default branch for the load command -via `use`: -``` -zed use logs@live -zed load sample.zng -``` -During a `load` operation, a commit is broken out into units called _data objects_ -where a target object size is configured into the pool, -typically 100MB-1GB. The records within each object are sorted by the pool key. -A data object is presumed by the implementation -to fit into the memory of an intake worker node -so that such a sort can be trivially accomplished. - -Data added to a pool can arrive in any order with respect to the pool key. -While each object is sorted before it is written, -the collection of objects is generally not sorted. - -Each load operation creates a single commit object, which includes: -* an author and message string, -* a timestamp computed by the server, and -* an optional metadata field of any Zed type expressed as a ZSON value. -This data has the Zed type signature: -``` -{ - author: string, - date: time, - message: string, - meta: -} -``` -where `` is the type of any optionally attached metadata . -For example, this command sets the `author` and `message` fields: -``` -zed load -user user@example.com -message "new version of prod dataset" ... -``` -If these fields are not specified, then the Zed system will fill them in -with the user obtained from the session and a message that is descriptive -of the action. - -The `date` field here is used by the Zed lake system to do time travel -through the branch and pool history, allowing you to see the state of -branches at any time in their commit history. - -Arbitrary metadata expressed as any [ZSON value](../formats/zson.md) -may be attached to a commit via the `-meta` flag. This allows an application -or user to transactionally commit metadata alongside committed data for any -purpose. This approach allows external applications to implement arbitrary -data provenance and audit capabilities by embedding custom metadata in the -commit history. - -Since commit objects are stored as Zed, the metadata can easily be -queried by running the `log -f zng` to retrieve the log in ZNG format, -for example, and using [`zq`](zq.md) to pull the metadata out -as in: -``` -zed log -f zng | zq 'has(meta) | yield {id,meta}' - -``` - -### 2.9 Log -``` -zed log [options] [commitish] -``` -The `log` command, like `git log`, displays a history of the commit objects -starting from any commit, expressed as a [commitish](#142-commitish). If no argument is -given, the tip of the working branch is used. - -Run `zed log -h` for a list of command-line options. - -To understand the log contents, the `load` operation is actually -decomposed into two steps under the covers: -an "add" step stores one or more -new immutable data objects in the lake and a "commit" step -materializes the objects into a branch with an ACID transaction. -This updates the branch pointer to point at a new commit object -referencing the data objects where the new commit object's parent -points at the branch's previous commit object, thus forming a path -through the object tree. - -The `log` command prints the commit ID of each commit object in that path -from the current pointer back through history to the first commit object. - -A commit object includes -an optional author and message, along with a required timestamp, -that is stored in the commit journal for reference. These values may -be specified as options to the `load` command, and are also available in the -API for automation. - -> Note that the branchlog meta-query source is not yet implemented. - -### 2.10 Merge - -Data is merged from one branch into another with the `merge` command, e.g., -``` -zed merge -use logs@updates main -``` -where the `updates` branch is being merged into the `main` branch -within the `logs` pool. - -A merge operation finds a common ancestor in the commit history then -computes the set of changes needed for the target branch to reflect the -data additions and deletions in the source branch. -While the merge operation is performed, data can still be written concurrently -to both branches and queries performed and everything remains transactionally -consistent. Newly written data remains in the -branch while all of the data present at merge initiation is merged into the -parent. - -This Git-like behavior for a data lake provides a clean solution to -the live ingest problem. -For example, data can be continuously ingested into a branch of main called `live` -and orchestration logic can periodically merge updates from branch `live` to -branch `main`, possibly compacting and indexing data after the merge -according to configured policies and logic. - -### 2.11 Query -``` -zed query [options] -``` -The `query` command runs a Zed program with data from a lake as input. -A query typically begins with a [from operator](../language/operators/from.md) -indicating the pool and branch to use as input. If `from` is not present, then the -query reads from the working branch. - -The pool/branch names -are specified with `from` at the beginning of the Zed query along with an optional -time range using `range` and `to`. - -As with `zq`, the default output format is ZSON for -terminals and ZNG otherwise, though this can be overridden with -`-f` to specify one of the various supported output formats. - -If a pool name is provided to `from` without a branch name, then branch -"main" is assumed. - -This example reads every record from the full key range of the `logs` pool -and sends the results to stdout. - -``` -zed query 'from logs' -``` - -We can narrow the span of the query by specifying the key range, where these -values refer to the pool key: -``` -zed query 'from logs range 2018-03-24T17:36:30.090766Z to 2018-03-24T17:36:30.090758Z' -``` -These range queries are efficiently implemented as the data is laid out -according to the pool key and seek indexes keyed by the pool key -are computed for each data object. - -Lake queries also can refer to HEAD (i.e., the branch context set in the most -recent `use` command) either implicitly by omitting the `from` operator: -``` -zed query '*' -``` -or by referencing `HEAD`: -``` -zed query 'from HEAD' -``` - -When querying data to the ZNG output format, -output from a pool can be easily piped to other commands like `zq`, e.g., -``` -zed query -f zng 'from logs' | zq -f table 'count() by field' - -``` -Of course, it's even more efficient to run the query inside of the pool traversal -like this: -``` -zed query -f table 'from logs | count() by field' -``` -By default, the `query` command scans pool data in pool-key order though -the Zed optimizer may, in general, reorder the scan to optimize searches, -aggregations, and joins. -An order hint can be supplied to the `query` command to indicate to -the optimizer the desired processing order, but in general, `sort` operators -should be used to guarantee any particular sort order. - -Arbitrarily complex Zed queries can be executed over the lake in this fashion -and the planner can utilize cloud resources to parallelize and scale the -query over many parallel workers that simultaneously access the Zed lake data in -shared cloud storage (while also accessing locally- or cluster-cached copies of data). - -#### Meta-queries - -Commit history, metadata about data objects, lake and pool configuration, -etc. can all be queried and -returned as Zed data, which in turn, can be fed into Zed analytics. -This allows a very powerful approach to introspecting the structure of a -lake making it easy to measure, tune, and adjust lake parameters to -optimize layout for performance. - -These structures are introspected using meta-queries that simply -specify a metadata source using an extended syntax in the `from` operator. -There are three types of meta-queries: -* `from :` - lake level -* `from pool:` - pool level -* `from pool@branch<:meta>` - branch level - -`` is the name of the metadata being queried. The available metadata -sources vary based on level. - -For example, a list of pools with configuration data can be obtained -in the ZSON format as follows: -``` -zed query -Z "from :pools" -``` -This meta-query produces a list of branches in a pool called `logs`: -``` -zed query -Z "from logs:branches" -``` -Since this is all just Zed, you can filter the results just like any query, -e.g., to look for particular branch: -``` -zed query -Z "from logs:branches | branch.name=='main'" -``` - -This meta-query produces a list of the data objects in the `live` branch -of pool `logs`: -``` -zed query -Z "from logs@live:objects" -``` - -You can also pretty-print in human-readable form most of the metadata Zed records -using the "lake" format, e.g., -``` -zed query -f lake "from logs@live:objects" -``` - -### 2.12 Rename -``` -zed rename -``` -The `rename` command assigns a new name `` to an existing -pool ``, which may be referenced by its ID or its previous name. - -### 2.13 Serve -``` -zed serve [options] -``` -The serve command implements Zed's server personality to service requests -from instances of Zed's client personality. -It listens for Zed lake API requests on the interface and port -specified by the `-l` option, executes the requests, and returns results. - -### 2.14 Use -``` -zed use [] -``` -The `use` command sets the working branch to the indicated commitish. -When run without a commitish argument, it displays the current commitish -in use. - -For example, -``` -zed use logs -``` -provides a "pool-only" commitish that sets the working branch to `logs@main`. - -If a `@branch` or commit ID are given without a pool prefix, then the pool of -the commitish previously in use is presumed. For example, if you are on -`logs@main` then run this command: -``` -zed use @test -``` -then the working branch is set to `logs@test`. - -To specify a branch in another pool, simply prepend -the pool name to the desired branch: -``` -zed use otherpool@otherbranch -``` -This command stores the working branch in `$HOME/.zed_head`. diff --git a/versioned_docs/version-v1.1.0/commands/zq.md b/versioned_docs/version-v1.1.0/commands/zq.md deleted file mode 100644 index 0d3bb0100..000000000 --- a/versioned_docs/version-v1.1.0/commands/zq.md +++ /dev/null @@ -1,704 +0,0 @@ ---- -sidebar_position: 0 -sidebar_label: zq -description: A command-line tool that uses the Zed Language for pipeline-style search and analytics. ---- - -# zq - -> **TL;DR** `zq` is a command-line tool that uses the [Zed language](../language/README.md) -for pipeline-style search and analytics. `zq` can query a variety -of data formats in files, over HTTP, or in S3 storage. -It is particularly fast when operating on data in the Zed-native [ZNG](../formats/zng.md) format. -> -> The `zq` design philosophy blends the query/search-tool approach -of `jq`, `awk`, and `grep` with the command-line, embedded database approach -of `sqlite` and `duckdb`. - -## 1. Usage - -``` -zq [ options ] [ query ] input [ input ... ] -zq [ options ] query -``` -`zq` is a command-line tool for processing data in diverse input -formats, providing search, analytics, and extensive transformations -using the [Zed language](../language/README.md). A query typically applies Boolean logic -or keyword search to filter the input, then transforms or analyzes -the filtered stream. Output is written to one or more files or to -standard output. - -Each `input` argument must be a file path, an HTTP or HTTPS URL, -an S3 URL, or standard input specified with `-`. - -For built-in command help and a listing of all available options, -simply run `zq` with no arguments. - -`zq` supports a [number of formats](#2-input-formats) but [ZNG](../formats/zng.md) -tends to be the most space-efficient and most performant. ZNG has efficiency similar to -[Avro](https://avro.apache.org/docs/current/spec.html) -and [Protocol Buffers](https://developers.google.com/protocol-buffers) -but its comprehensive [Zed type system](../formats/zed.md) obviates -the need for schema specification or registries. -Also, the ZSON format is human-readable and entirely one-to-one with ZNG -so there is no need to represent non-readable formats like Avro or Protocol Buffers -in a clunky JSON encapsulated form. - -`zq` typically operates on ZNG-encoded data and when you want to inspect -human-readable bits of output, you merely format it as ZSON, which is the -default format when output is directed to the terminal. ZNG is the default -when redirecting to a non-terminal output like a file or pipe. - -When run with input arguments, each input's format is automatically inferred -([as described below](#22-auto-detection)) and each input is scanned -in the order appearing on the command line forming the input stream. - -A query expressed in the [Zed language](../language/README.md) -may be optionally specified and applied to the input stream. - -If no query is specified, the inputs are scanned without modification -and output in the desired format as described below. This latter approach -provides a convenient means to convert files from one format to another. - -To determine whether the first argument is a query or an input, -`zq` checks the local file system for the existence of a file by that name -or whether the name is an URL. -If no such file or URL exists, it attempts to parse the text as a Zed program. -If both checks fail, then an error is reported and `zq` exits. - -This heuristic is convenient but can result in a rare surprise when a simple -Zed query (like a keyword search) happens to correspond with a file of the -same name in the local directory. -To avoid this, you can provide the query with the `-query` flag, which specifies -the Zed program to run and forces all arguments to be interpreted as inputs. - -When `zq` is run with a query and no input arguments, then the query must -begin with a -* a [from, file, or get operator](../language/operators/from.md), or -* an explicit or implied [yield operator](../language/operators/yield.md). - -In the case of a `yield` with no inputs, the query is run with -a single input value of `null`. This provides a convenient means to run in a -"calculator mode" where input is produced by the yield and can be operated upon -by the Zed query, e.g., -```mdtest-command -zq -z '1+1' -``` -emits -```mdtest-output -2 -``` -Note here that the query `1+1` [implies](../language/overview.md#26-implied-operators) -`yield 1+1`. - -## 2. Input Formats - -`zq` currently supports the following input formats: - -| Option | Auto | Specification | -|-----------|------|------------------------------------------| -| `json` | yes | [JSON RFC 8259](https://www.rfc-editor.org/rfc/rfc8259.html) | -| `csv` | yes | [CSV RFC 4180](https://www.rfc-editor.org/rfc/rfc4180.html) | -| `parquet` | no | [Apache Parquet](https://github.com/apache/parquet-format) | -| `zson` | yes | [ZSON - Human-readable Format](../formats/zson.md) | -| `zng` | yes | [ZNG - Binary Row Format](../formats/zson.md) | -| `zst` | no | [ZST - Binary Columnar Format](../formats/zst.md) | -| `zjson` | yes | [ZJSON - Zed over JSON](../formats/zjson.md) | -| `zeek` | yes | [Zeek Logs](https://docs.zeek.org/en/master/logs/index.html) | - -The input format is typically detected automatically and the formats for which -`Auto` is `yes` in the table above support _auto detection_. -Formats without auto detection require the `-i` option. - -### 2.1 Hard-wired Input Format - -The input format is specified with the `-i` flag. - -When `-i` is specified, all of the inputs on the command-line must be -in the indicated format. - -### 2.2 Auto-detection - -When using _auto detection_, each input's format is independently determined -so it is possible to easily blend different input formats into a unified -output format. - -For example, suppose this content is in a file `sample.csv`: -```mdtest-input sample.csv -a,b -1,foo -2,bar -``` -and this content is in `sample.json` -```mdtest-input sample.json -{"a":3,"b":"baz"} -``` -then the command -```mdtest-command -zq -z sample.csv sample.json -``` -would produce this output in the default ZSON format -```mdtest-output -{a:1.,b:"foo"} -{a:2.,b:"bar"} -{a:3,b:"baz"} -``` - -### 2.3 ZSON-JSON Auto-detection - -Since ZSON is a superset of JSON, `zq` must be careful in whether it -interprets input as ZSON as JSON. While you can always clarify your intent -with the `-i zson` or `-i json`, `zq` attempts to "just do the right thing" -when you run it with JSON vs. ZSON. - -While `zq` can parse any JSON using its built-in ZSON parser this is typically -not desirable because (1) the ZSON parser is not particularly performant and -(2) all JSON numbers are floating point but the ZSON parser will parse as -JSON any number that appears without a decimal point as an integer type. - -> The reason `zq` is not particularly performant for ZSON is that the ZNG or -> ZST formats are semantically equivalent to ZSON but much more efficient and -> the design intent is that these efficient binary formats should be used in -> use cases where performance matters. ZSON is typically used only when -> data needs to be human-readable in interactive settings or in automated tests. - -To this end, `zq` uses a heuristic to select between ZSON in JSON when the -`-i` option is not specified. Specifically, JSON is selected when the first values -of the input are parsable as valid JSON and includes a JSON object either -as an outer object or as a value nested somewhere within a JSON array. - -This heuristic almost always works in practice because ZSON records -typically omit quotes around field names. - -## 3. Output Formats - -The output format defaults to either ZSON or ZNG and may be specified -with the `-f` option. The supported output formats include all of -the input formats along with text and table formats, which are useful -for displaying data. (They do not capture all the information required -to reconstruct the original data so they are not supported input formats.) - -Since ZSON is a common format choice, the `-z` flag is a shortcut for -`-f zson.` Also, `-Z` is a shortcut for `-f zson` with `-pretty 4` as -described below. - -And since JSON is another common format choice, the `-j` flag is a shortcut for -`-f json.` - -### 3.1 Output Format Selection - -When the format is not specified with `-f`, it defaults to ZSON if the output -is a terminal and to ZNG otherwise. - -While this can cause an occasional surprise (e.g., forgetting `-f` or `-z` -in a scripted test that works fine on the command line but fails in CI), -we felt that the design of having a uniform default had worse consequences: -* If the default format were ZSON, it would be very easy to create pipelines -and deploy to production systems that were accidentally using ZSON instead of -the much more efficient ZNG format because the `-f zng` had been mistakenly -omitted from some command. The beauty of Zed is that all of this "just works" -but it would otherwise perform poorly. -* If the default format were ZNG, then users would be endlessly annoyed by -binary output to their terminal when forgetting to type `-f zson`. - -In practice, we have found that the output defaults -"just do the right thing" almost all of the time. - -### 3.2 ZSON Pretty Printing - -ZSON text may be "pretty printed" with the `-pretty` option, which takes -the number of spaces to use for indentation. As this is a common option, -the `-Z` option is a shortcut for `-f zson -pretty 4`. - -For example, -```mdtest-command -echo '{a:{b:1,c:[1,2]},d:"foo"}' | zq -Z - -``` -produces -```mdtest-output -{ - a: { - b: 1, - c: [ - 1, - 2 - ] - }, - d: "foo" -} -``` -and -```mdtest-command -echo '{a:{b:1,c:[1,2]},d:"foo"}' | zq -f zson -pretty 2 - -``` -produces -```mdtest-output -{ - a: { - b: 1, - c: [ - 1, - 2 - ] - }, - d: "foo" -} -``` - -When pretty printing, colorization is enabled by default when writing to a terminal, -and can be disabled with `-color false`. - -### 3.3 Pipeline-friendly ZNG - -Though it's a compressed binary format, ZNG data is self-describing and stream-oriented -and thus is pipeline friendly. - -Since data is self-describing you can simply take ZNG output -of one command and pipe it to the input of another. It doesn't matter if the value -sequence is scalars, complex types, or records. There is no need to declare -or register schemas or "protos" with the downstream entities. - -In particular, ZNG data can simply be concatenated together, e.g., -```mdtest-command -zq -f zng 'yield 1,[1,2,3]' > a.zng -zq -f zng 'yield {s:"hello"},{s:"world"}' > b.zng -cat a.zng b.zng | zq -z - -``` -produces -```mdtest-output -1 -[1,2,3] -{s:"hello"} -{s:"world"} -``` -And while this ZSON output is human readable, the ZNG files are binary, e.g., -```mdtest-command -zq -f zng 'yield 1,[1,2,3]' > a.zng -hexdump -C a.zng -``` -produces -```mdtest-output -00000000 02 00 01 09 1b 00 09 02 02 1e 07 02 02 02 04 02 |................| -00000010 06 ff |..| -00000012 -``` - -### 3.4 Schema-rigid Outputs - -Certain data formats like Parquet are "schema rigid" in the sense that they -require a schema to be defined before values can be written into the file and -all the values in the file must conform to this schema. - -Zed, however, has a fine-grained type system instead of schemas and a sequence -of data values are completely self-describing and may be heterogeneous in nature. -This creates a challenge converting the type-flexible Zed formats to a schema-rigid -format like Parquet. - -For example, this seemingly simple conversion: -```mdtest-command fails -echo '{x:1}{s:"hello"}' | zq -o out.parquet -f parquet - -``` -causes this error -```mdtest-output -Parquet output requires uniform records but multiple types encountered (consider 'fuse') -``` - -#### 3.4.1 Fusing Schemas - -As suggested by the error above, the Zed `fuse` operator can merge different record -types into a blended type, e.g., here we create the file and read it back: -```mdtest-command -echo '{x:1}{s:"hello"}' | zq -o out.parquet -f parquet fuse - -zq -z -i parquet out.parquet -``` -but the data was necessarily changed (by inserting nulls): -```mdtest-output -{x:1,s:null(string)} -{x:null(int64),s:"hello"} -``` - -#### 3.4.2 Splitting Schemas - -Another common approach to dealing with the schema-rigid limitation of Parquet -is to create a separate file for each schema. - -`zq` can do this too with the `-split` option, which specifies a path -to a directory for the output files. If the path is `.`, then files -are written to the current directory. - -The files are named using the `-o` option as a prefix and the suffix is -`-.` where the `` is determined from the output format and -where `` is a unique integer for each distinct output file. - -For example, the example above would produce two output files, -which can then be read separately to reproduce the original data, e.g., -```mdtest-command -echo '{x:1}{s:"hello"}' | zq -o out -split . -f parquet - -zq -z -i parquet out-*.parquet -``` -produces the original data -```mdtest-output -{x:1} -{s:"hello"} -``` - -While the `-split` option is most useful for schema-rigid formats, it can -be used with any output format. - -## 4. Query Debugging - -If you are ever stumped about how the `zq` compiler is parsing your query, -you can always run `zq -C` to compile and display your query in canonical form -without running it. -This can be especially handy when you are learning the language and -[its shortcuts](../language/overview.md#26-implied-operators). - -For example, this query -```mdtest-command -zq -C 'has(foo)' -``` -is an implied [where operator](../language/operators/where.md), which matches values -that have a field `foo`, i.e., -```mdtest-output -where has(foo) -``` -while this query -```mdtest-command -zq -C 'lower(foo)' -``` -is an implied [yield operator](../language/operators/yield.md), which produces the lower case -version of the presumed string in field `foo`, i.e., -```mdtest-output -yield lower(foo) -``` - -## 5. Error Handling - -Fatal errors like "file not found" or "file system full" are reported -as soon as they happen and cause the `zq` process to exit. - -On the other hand, -runtime errors resulting from the Zed query itself -do not halt execution. Instead, these error conditions produce -[first-class Zed errors](../language/overview.md#53-first-class-errors) -in the data output stream interleaved with any valid results. -Such errors are easily queried with the -[is_error function](../language/functions/is_error.md). - -This approach provides a robust technique for debugging complex query pipelines, -where errors can be wrapped in one another providing stack-trace-like debugging -output alongside the output data. This approach has emerged as a more powerful -alternative to the traditional technique of looking through logs for errors -or trying to debug a halted program with a vague error message. - -For example, this query -``` -echo '1 2 0 3' | zq '10.0/this' - -``` -produces -``` -10. -5. -error("divide by zero") -3.3333333333333335 -``` -and -``` -echo '1 2 0 3' | zq '10.0/this' - | zq 'is_error(this)' - -``` -produces just -``` -error("divide by zero") -``` - -## 6. Examples - -As you may have noticed, many examples of the [Zed language](../language/README.md) -are illustrated using this pattern -``` -echo | zq - -``` -which is used throughout the [language documentation](../language/README.md) -and [operator reference](../language/operators/README.md). - -The language documentation and [tutorials directory](../tutorials/README.md) -have many examples, but here are a few more simple `zq` use cases. - -_Hello, world_ -``` -echo '"hello, world"' | zq -z 'yield this' - -``` -produces this ZSON output -``` -"hello, world" -``` - -_Some values of available data types_ -``` -echo '1 1.5 [1,"foo"] |["apple","banana"]|' | zq -z 'yield this' - -``` -produces -``` -1 -1.5 -[1,"foo"] -|["apple","banana"]| -``` -_The types of various data_ -``` -echo '1 1.5 [1,"foo"] |["apple","banana"]|' | zq -z 'yield typeof(this)' - -``` -produces -``` - - -<[(int64,string)]> -<|[string]|> -``` -_A simple aggregation_ -``` -echo '{key:"foo",val:1}{key:"bar",val:2}{key:"foo",val:3}' | zq -z 'sum(val) by key | sort key' - -``` -produces -``` -{key:"bar",sum:2} -{key:"foo",sum:4} -``` -_Convert CSV to Zed and cast a to an integer from default float_ -``` -printf "a,b\n1,foo\n2,bar\n" | zq 'a:=int64(a)' - -``` -produces -``` -{a:1,b:"foo"} -{a:2,b:"bar"} -``` -_Convert JSON to Zed and cast to an integer from default float_ -``` -echo '{"a":1,"b":"foo"}{"a":2,"b":"bar"}' | zq 'a:=int64(a)' - -``` -produces -``` -{a:1,b:"foo"} -{a:2,b:"bar"} -``` -_Make a schema-rigid Parquet file using fuse and turn it back into Zed_ -``` -echo '{a:1}{a:2}{b:3}' | zq -f parquet -o tmp.parquet fuse - -zq -z -i parquet tmp.parquet -``` -produces -``` -{a:1,b:null(int64)} -{a:2,b:null(int64)} -{a:null(int64),b:3} -``` - -## 7. Performance - -Your mileage may vary, but many new users of `zq` are surprised by its speed -compared to tools like `jq`, `grep`, `awk`, or `sqlite` especially when running -`zq` over files in the ZNG format. - -### 7.1 Fast Pattern Matching - -One important technique that helps `zq` run fast is to take advantage of queries -that involve fine-grained searches. - -When a query begins with a logical expression containing either a search -or a predicate match with a constant value, and presuming the input data format -is ZNG, then the runtime optimizes the query by performing an efficient, -byte-oriented "pre-search" of the values required in the predicate. This pre-search -scans the bytes that comprise a large buffer of values and looks for these values -and, if they are not present, the entire buffer is discarded knowing no individual -value in that buffer could match because the required serialized -values were not present in the buffer. - -For example, if the Zed query is -``` -"http error" and ipsrc==10.0.0.1 | count() -``` -then the pre-search would look for the string "http error" and the Zed encoding -of the IP address 10.0.0.1 and unless both those values are present, then the -buffer is discarded. - -Moreover, ZNG data is compressed and arranged into frames that can be decompressed -and processed in parallel. This allows the decompression and pre-search to -run in parallel very efficiently across a large number of threads. When searching -for sparse results, many frames are discarded without their uncompressed bytes -having to be processed any further. - -While this pre-search technique results in very fast brute-force pattern matching, -[search indexes](zed.md#16-search-indexes) -can also be created when Zed data is managed by a Zed lake -thereby avoiding scans of data altogether as the index pinpoints the locations -of specific values in the lake. - -### 7.2 Efficient JSON Processing - -While processing data in the ZNG format is far more efficient than JSON, -there is substantial JSON data in the world and it is important for JSON -input to perform well. - -This proved a challenge as `zq` is written in Go and Go's JSON package -is not particularly performant. To this end, `zq` has its own lean and simple -[JSON tokenizer](https://pkg.go.dev/github.com/brimdata/zed/pkg/jsonlexer), -which performs quite well, -and is -[integrated tightly](https://github.com/brimdata/zed/blob/v1.1.0/zio/jsonio/reader.go) -with Zed's internal data representation. -Moreover, like `jq`, -`zq`'s JSON parser does not require objects to be newline delimited and can -incrementally parse the input to minimize memory overhead and improve -processor cache performance. - -The net effect is a JSON parser that is typically a bit faster than the -native C implementation in `jq`. - -### 7.3 Performance Comparisons - -To provide a rough sense of the performance tradeoffs between `zq` and -other tooling, this section provides results of a few simple speed tests. - -#### 7.3.1 Test Data - -These tests are easy to reproduce. The input data comes from the -[Zed sample data repository](https://github.com/brimdata/zed-sample-data), -where we used a semi-structured Zeek "conn" log from the `zeek-default` directory. - -It is easy to convert the Zeek logs to a local ZNG file using -zq's built-in `get` operator: -``` -zq -o conn.zng 'get https://raw.githubusercontent.com/brimdata/zed-sample-data/main/zeek-default/conn.log.gz' -``` -This creates a new file `conn.zng` from the Zeek log file fetched from GitHub. - -Note that this data is a gzip'd file in the Zeek format and `zq`'s auto-detector -figures out both that it is gzip'd and that the uncompressed format is Zeek. -There's no need to specify flags for this. - -Next, a JSON file can be converted from ZNG using: -``` -zq -f json conn.zng > conn.json -``` -Note here that we lose information in this conversion because the rich data types -of Zed (that were [translated from the Zeek format](https://github.com/brimdata/zed/blob/v1.1.0/zeek/Data-Type-Compatibility.md)) are lost. - -We'll also make a SQLite database in the file `conn.db` as the table named `conn`. -One easy way to do this is to install -[sqlite-utils](https://sqlite-utils.datasette.io/en/stable/) -and run -``` -sqlite-utils insert conn.db conn conn.json --nl -``` -(If you need a cup of coffee, a good time to get it would be when -loading the JSON into SQLite.) - -#### 7.3.2 File Sizes - -Note the resulting file sizes: -``` -% du -h conn.json conn.db conn.zng -416M conn.json -192M conn.db - 38M conn.zng -``` -Much of the performance of ZNG derives from an efficient, parallelizable -structure where frames of data are compressed -(currently with [LZ4](http://lz4.github.io/lz4/) though the -specification supports multiple algorithms) and the sequence of values -can be processed with only partial deserialization. - -That said, there are quite a few more opportunities to further improve -the performance of `zq` and the Zed system and we have a number of projects -forthcoming on this front. - -#### 7.3.3 Tests - -We ran three styles of tests on a Mac quad-core 2.3GHz i7: -* `count` - compute the number of values present -* `search` - find a value in a field -* `agg` - sum a field grouped by another field - -Each test was run for `jq`, `zq` on JSON, `sqlite3`, and `zq` on ZNG. - -We used the Bash `time` command to measure elapsed time. - -The command lines for the `count` test were: -``` -jq -s length conn.json -sqlite3 conn.db 'select count(*) from conn' -zq 'count()' conn.zng -zq 'count()' conn.json -``` -The command lines for the `search` test were: -``` -jq 'select(.id.orig_h=="10.47.23.5")' conn.json -sqlite3 conn.db 'select * from conn where json_extract(id, "$.orig_h")=="10.47.23.5"' -zq 'id.orig_h==10.47.23.5' conn.zng -zq 'id.orig_h==10.47.23.5' conn.json -``` -Here, we look for an IP address (10.47.23.5) in a specific -field `id.orig_h` in the semi-structured data. Note when using ZNG, -the IP is a native type whereas for `jq` and SQLite it is a string. -Note that `sqlite` must use its `json_extract` function since nested JSON objects -are stored as minified JSON text. - -The command lines for the `agg` test were: -``` -jq -n -f agg.jq conn.json -sqlite3 conn.db 'select sum(orig_bytes),json_extract(id, "$.orig_h") as orig_h from conn group by orig_h' -zq "sum(orig_bytes) by id.orig_h" conn.zng -zq "sum(orig_bytes) by id.orig_h" conn.json -``` -where the `agg.jq` script is: -``` -def adder(stream): - reduce stream as $s ({}; .[$s.key] += $s.val); -adder(inputs | {key:.id.orig_h,val:.orig_bytes}) -| to_entries[] -| {orig_h: (.key), sum: .value} -``` - -#### 7.3.4 Results - -The following table summarizes the results of each test as a column and -each tool as a row with the speed-up factor (relative to `jq`) -shown in parentheses: - -| | `count` | `search` | `agg` | -|------|---------------|---------------|---------------| -| `jq` | 11,540ms (1X) | 10,730ms (1X) | 20,175ms (1X) | -| `zq-json` | 7,150ms (1.6X) | 7,230ms (1.5X) | 7,390ms (2.7X) | -| `sqlite` | 100ms (115X) | 620ms (17X) | 1,475ms (14X) | -| `zq-zng` | 110ms (105X) | 135ms (80X) | 475ms (42X) | - -To summarize, `zq` with ZNG is consistently fastest though `sqlite` -was a bit faster counting rows. - -In particular, `zq` is substantially faster (40-100X) than `jq` with the efficient -ZNG format but more modestly faster (50-170%) when processing the bulky JSON input. -This is expected because parsing JSON becomes the bottleneck. - -While SQLite is much faster than `jq`, it is not as fast as `zq`. The primary -reason for this is that SQLite stores its semi-structured columns as minified JSON text, -so it must scan and parse the JSON when executing the _where_ clause above -as well as the aggregated fields. - -Also, note that the inferior performance of `sqlite` is in areas where databases -perform extraordinarily well if you do the work to -(1) transform semi-structured columns to relational columns by flattening -nested JSON objects (which are not indexable by `sqlite`) and -(2) configuring database indexes. - -In fact, if you implement these changes, `sqlite` performs better than `zq` on these tests. - -However, the benefit of Zed is that no flattening is required. And unlike `sqlite`, -`zq` is not intended to be a database. That said, there is no reason why database -performance techniques cannot be applied to the Zed model and this is precisely what the -open-source Zed project intends to do. As a first step, with a -[Zed lake](zed.md), you can build type-flexible -[search indexes](zed.md#16-search-indexes) -to scale searches across very large stores of Zed data. - -Stay tuned! diff --git a/versioned_docs/version-v1.1.0/formats/README.md b/versioned_docs/version-v1.1.0/formats/README.md deleted file mode 100644 index ad172163f..000000000 --- a/versioned_docs/version-v1.1.0/formats/README.md +++ /dev/null @@ -1,284 +0,0 @@ -# Zed Formats - -> **TL;DR** The Zed data model defines a new and easy way to manage, store, -> and process data utilizing an emerging concept called -[super-structured data](#2-zed-a-super-structured-pattern). -> The [data model specification](zed.md) defines the high-level model that is realized -> in a [family of interoperable serialization formats](#3-the-data-model-and-formats), -> providing a unified approach to row, columnar, and human-readable formats. -> Zed is a superset of both the dataframe/table model of relational systems and the -> semi-structured model that is used ubiquitously in development as JSON and by NOSQL -> data stores. The ZSON spec has [a few examples](zson.md#3-examples). - -## 1. Background - -Zed offers a new and improved way to think about and manage data. - -Modern data models are typically described in terms of their _structured-ness_: -* _tabular-structured_, often simply called _"structured"_, -where a specific schema is defined to describe a table and values are enumerated that conform to that schema; -* _semi-structured_, where arbitrarily complex, hierarchical data structures -define the data and values do not fit neatly into tables, e.g., JSON and XML; and -* _unstructured_, where arbitrary text is formatted in accordance with -external, often vague, rules for its interpretation. - -### 1.1 The Tabular-structured Pattern - -CSV is arguably the simplest but most frustrating format that follows the tabular-structured -pattern. It provides a bare bones schema consisting of the names of the columns as the -first line of a file followed by a list of comma-separated, textual values -whose types must be inferred from the text. The lack of a universally adopted -specification for CSV is an all too common source of confusion and frustration. - -The traditional relational database, on the other hand, -offers the classic, comprehensive example of the tabular-structured pattern. -The table columns have precise names and types. -Yet, like CSV, there is no universal standard format for relational tables. -The [_SQLite file format_](https://sqlite.org/fileformat.html) -is arguably the _de facto_ standard for relational data, -but this format describes a whole, specific database --- indexes and all --- -rather than a stand-alone table. - -Instead, file formats like Avro, ORC, and Parquet arose to represent tabular data -with an explicit schema followed by a sequence of values that conform to the schema. -While Avro and Parquet schemas can also represent semi-structured data, all of the -values in a given Avro or Parquet file must conform to the same schema. -The [Iceberg specification](https://iceberg.apache.org/spec/) -defines data types and metadata schemas for how large relational tables can be -managed as a collection of Avro, ORC, and/or Parquet files. - -### 1.2 The Semi-structured Pattern - -JSON, on the other hand, is the ubiquitous example of the semi-structured pattern. -Each JSON value is self-describing in terms of its -structure and types, though the JSON type system is limited. - -When a sequence of JSON objects is organized into a stream -(perhaps [separated by newlines](http://ndjson.org/)) -each value can take on any form. -When all the values have the same form, the JSON sequence -begins to look like a relational table, but the lack of a comprehensive type system, -a union type, and precise semantics for columnar layout limits this interpretation. - -[BSON](https://bsonspec.org/) -and [Ion](https://amzn.github.io/ion-docs/) -were created to provide a type-rich elaboration of the -semi-structured model of JSON along with performant binary representations -though there is no mechanism for precisely representing the type of -a complex value like an object or an array other than calling it -type "object" or type "array", e.g., as compared to "object with field s -of type string" or "array of number". - -[JSON Schema](https://json-schema.org/) -addresses JSON's lack of schemas with an approach to augment -one or more JSON values with a schema definition itself expressed in JSON. -This creates a parallel type system for JSON, which is useful and powerful in many -contexts, but introduces schema-management complexity when simply trying to represent -data in its natural form. - -### 1.3 The Hybrid Pattern - -As the utility and ease of the semi-structured design pattern emerged, -relational system design, originally constrained by the tabular-structured -design pattern, has embraced the semi-structured design pattern -by adding support for semi-structured table columns. -"Just put JSON in a column." - -[SQL++](https://asterixdb.apache.org/docs/0.9.7.1/sqlpp/manual.html) -pioneered the extension of SQL to semi-structured data by -adding support for referencing and unwinding complex, semi-structured values, -and most modern SQL query engines have adopted variations of this model -and have extended the relational model with a semi-structured column type. - -But once you have put a number of columns of JSON data into a relational -table, is it still appropriately called "structured"? -Instead, we call this approach the hybrid tabular-/semi-structured pattern, -or more simply, _"the hybrid pattern"_. - -## 2. Zed: A Super-structured Pattern - -The insight in Zed is to remove the tabular and schema concepts from -the underlying data model altogether and replace them with a granular and -modern type system inspired by general-purpose programming languages. -Instead of defining a single, composite schema to -which all values must conform, the Zed type system allows each value to freely -express its type in accordance with the type system. - -In this approach, -Zed is neither tabular nor semi-structured. Zed is "super-structured". - -In particular, the Zed record type looks like a schema but when -serializing Zed data, the model is very different. A Zed sequence does not -comprise a record-type declaration followed by a sequence of -homogeneously-typed record values, but instead, -is a sequence of arbitrarily typed Zed values, which may or may not all -be records. - -Yet when a sequence of Zed values _in fact conforms to a uniform record type_, -then such a collection of Zed records looks precisely like a relational table. -Here, the record type -of such a collection corresponds to a well-defined schema consisting -of field names (i.e, column names) where each field has a specific Zed type. -Zed also has named types, so by simply naming a particular record type -(i.e., a schema), a relational table can be projected from a pool of Zed data -with a simple type query for that named type. - -But unlike traditional relational tables, these Zed-constructed tables can have arbitrary -structure in each column as Zed allows the fields of a record -to have an arbitrary type. This is very different compared to the hybrid pattern: -all Zed data at all levels conforms to the same data model. Here, both the -tabular-structured and semi-structured patterns are representable in a single model. -Unlike the hybrid pattern, systems based on Zed have -no need to simultaneously support two very different data models. - -In other words, Zed unifies the relational data model of SQL tables -with the document model of JSON into a _super-structured_ -design pattern enabled by the Zed type system. -An explicit, uniquely-defined type of each value precisely -defines its entire structure, i.e., its super-structure. There is -no need to traverse each hierarchical value --- as with JSON, BSON, or Ion --- -to discover each value's structure. - -And because Zed derives it design from the vast landscape -of existing formats and data models, it was deliberately designed to be -a superset of --- and thus interoperable with --- a broad range of formats -including JSON, BSON, Ion, Avro, ORC, Parquet, CSV, JSON Schema, and XML. - -As an example, most systems that are based on semi-structured data would -say the JSON value -``` -{"a":[1,"foo"]} -``` -is of type object and the value of key `a` is type array. -In Zed, however, this value's type is type `record` with field `a` -of type `array` of type `union` of `int64` and `string`, -expressed succinctly in ZSON as -``` -{a:[(int64,string)]} -``` -This is super-structuredness in a nutshell. - -### 2.1 Zed and Schemas - -While the Zed data model removes the schema constraint, -the implication here is not that schemas are unimportant; -to the contrary, schemas are foundational. Schemas not only define agreement -and semantics between communicating entities, but also serve as the cornerstone -for organizing and modeling data for data engineering and business intelligence. - -That said, schemas often create complexity in system designs -where components might simply want to store and communicate data in some -meaningful way. For example, an ETL pipeline should not break when upstream -structural changes prevent data from fitting in downstream relational tables. -Instead, the pipeline should continue to operate and the data should continue -to land on the target system without having to fit into a predefined table, -while also preserving its super-structure. - -This is precisely what Zed enables. A system layer above and outside -the scope of the Zed data layer can decide how to adapt to the structural -changes with or without administrative intervention. - -To this end, whether all the values must conform to a schema and -how schemas are managed, revised, and enforced is all outside the scope of Zed; -rather, the Zed data model provides a flexible and rich foundation -for schema interpretation and management. - -### 2.2 Type Combinatorics - -A common objection to using a type system to represent schemas is that -diverse applications generating arbitrarily structured data can produce -a combinatorial explosion of types for each shape of data. - -In practice, this condition rarely arises. Applications generating -"arbitrary" JSON data generally conform to a well-defined set of -JSON object structures. - -A few rare applications carry unique data values as JSON object keys, -though this is considered bad practice. - -Even so, this is all manageable in the Zed data model as types are localized -in scope. The number of types that must be defined in a stream of values -is linear in the input size. Since data is self-describing and there is -no need for a global schema registry in Zed, this hypothetical problem is moot. - -### 2.3 Analytics Performance - -One might think that removing schemas from the Zed data model would conflict -with an efficient columnar format for Zed, which is critical for -high-performance analytics. -After all, database -tables and formats like Parquet and ORC all require schemas to organize values -and then rely upon the natural mapping of schemas to columns. - -Super-structure, on the other hand, provides an alternative approach to columnar structure. -Instead of defining a schema and then fitting a sequence of values into their appropriate -columns based on the schema, Zed values self-organize into columns based on their -super-structure. Here columns are created dynamically as data is analyzed -and each top-level type induces a specific set of columns. When all of the -values have the same top-level type (i.e., like a schema), then the Zed columnar -object is just as performant as a traditional schema-based columnar format like Parquet. - -### 2.4 First-class Types - -With first-class types, any type can also be a value, which means that in -a properly designed query and analytics system based on Zed, a type can appear -anywhere that a value can appear. In particular, types can be aggregation keys. - -This is very powerful for data discovery and introspection. For example, -to count the different shapes of data, you might have a SQL-like query, -operating on each input value as `this`, that has the form: -``` - SELECT count(), typeof(this) as shape GROUP by shape, count -``` -Likewise, you could select a sample value of each shape like this: -``` - SELECT shape FROM ( - SELECT any(this) as sample, typeof(this) as shape GROUP by shape,sample - ) -``` -The Zed language is exploring syntax so that such operations are tighter -and more natural given the super-structure of Zed. For example, the above -two SQL-like queries could be written as: -``` - count() by shape:=typeof(this) - any(this) by typeof(this) | cut any -``` - -### 2.5 First-class Errors - -In SQL based systems, errors typically -result in cryptic messages or null values offering little insight as to the -actual cause of the error. - -Zed however includes first-class errors. When combined with the super-structured -data model, error values may appear anywhere in the output and operators -can propagate or easily wrap errors so complicated analytics pipelines -can be debugged by observing the location of errors in the output results. - -## 3. The Data Model and Formats - -The concept of super-structured data and first-class types and errors -is solidified in the [Zed data model specification](zed.md), -which defines the model but not the serialization formats. - -A set of companion documents define a family of tightly integrated -serialization formats that all adhere to the same Zed data model, -providing a unified approach to row, columnar, and human-readable formats: - -* [ZSON](zson.md) is a JSON-like, human readable format for Zed data. All JSON -documents are Zed values as the ZSON format is a strict superset of the JSON syntax. -* [ZNG](zng.md) is a row-based, binary representation of Zed data somewhat like -Avro but with Zed's more general model to represent a sequence of arbitrarily-typed -values. -* [ZST](zst.md) is a columnar version of ZNG like Parquet or ORC but also -embodies Zed's more general model for heterogeneous and self-describing schemas. -* [Zed over JSON](zjson.md) defines a JSON format for encapsulating Zed data -in JSON for easy decoding by JSON-based clients, e.g., -the [zed-js JavaScript library](https://github.com/brimdata/zealot/tree/main/packages/zed-js) -and the [Zed Python library](../libraries/python.md). - -Because all of the formats conform to the same Zed data model, conversions between -a human-readable form, a row-based binary form, and a row-based columnar form can -be trivially carried out with no loss of information. This is the best of both worlds: -the same data can be easily expressed in and converted between a human-friendly -and easy-to-program text form alongside efficient row and columnar formats. diff --git a/versioned_docs/version-v1.1.0/formats/_category_.yaml b/versioned_docs/version-v1.1.0/formats/_category_.yaml deleted file mode 100644 index 6464e66a9..000000000 --- a/versioned_docs/version-v1.1.0/formats/_category_.yaml +++ /dev/null @@ -1,2 +0,0 @@ -position: 6 -label: Formats diff --git a/versioned_docs/version-v1.1.0/formats/compression.md b/versioned_docs/version-v1.1.0/formats/compression.md deleted file mode 100644 index 60fcda1b9..000000000 --- a/versioned_docs/version-v1.1.0/formats/compression.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -sidebar_position: 5 -sidebar_label: Compression ---- - -# ZNG Compression Types - -This document specifies values for the `` byte of a -[ZNG compressed value message block](zng.md#2-the-zng-format) -and the corresponding algorithms for the `` byte sequence. - -As new compression algorithms are specified, they will be documented -here without any need to change the ZNG specification. - -Of the 256 possible values for the `` byte, only type `0` is currently -defined and specifies that `` contains an -[LZ4 block](https://github.com/lz4/lz4/blob/master/doc/lz4_Block_format.md). diff --git a/versioned_docs/version-v1.1.0/formats/zed.md b/versioned_docs/version-v1.1.0/formats/zed.md deleted file mode 100644 index 3d4fba7f1..000000000 --- a/versioned_docs/version-v1.1.0/formats/zed.md +++ /dev/null @@ -1,237 +0,0 @@ ---- -sidebar_position: 0 -sidebar_label: Data Model ---- - -# Zed Data Model - -Zed data is defined as an ordered sequence of one or more typed data values. -Each value's type is either a "primitive type", a "complex type", the "type type", -a "named type", or the "null type". - -## 1. Primitive Types - -Primitive types include signed and unsigned integers, IEEE binary and decimal -floating point, string, byte sequence, Boolean, IP address, IP network, -null, and a first-class type _type_. - -There are 30 types of primitive values with syntax defined as follows: - -| Name | Definition | -|------------|-------------------------------------------------| -| `uint8` | unsigned 8-bit integer | -| `uint16` | unsigned 16-bit integer | -| `uint32` | unsigned 32-bit integer | -| `uint64` | unsigned 64-bit integer | -| `uint128` | unsigned 128-bit integer | -| `uint256` | unsigned 256-bit integer | -| `int8` | signed 8-bit integer | -| `int16` | signed 16-bit integer | -| `int32` | signed 32-bit integer | -| `int64` | signed 64-bit integer | -| `int128` | signed 128-bit integer | -| `int256` | signed 256-bit integer | -| `duration` | signed 64-bit integer as nanoseconds | -| `time` | signed 64-bit integer as nanoseconds from epoch | -| `float16` | IEEE-754 binary16 | -| `float32` | IEEE-754 binary32 | -| `float64` | IEEE-754 binary64 | -| `float128` | IEEE-754 binary128 | -| `float256` | IEEE-754 binary256 | -| `decimal32` | IEEE-754 decimal32 | -| `decimal64` | IEEE-754 decimal64 | -| `decimal128` | IEEE-754 decimal128 | -| `decimal256` | IEEE-754 decimal256 | -| `bool` | the Boolean value `true` or `false` | -| `bytes` | a bounded sequence of 8-bit bytes | -| `string` | a UTF-8 string | -| `ip` | an IPv4 or IPv6 address | -| `net` | an IPv4 or IPv6 address and net mask | -| `type` | a Zed type value | -| `null` | the null type | - -The _type_ type provides for first-class types and even though a type value can -represent a complex type, the value itself is a singleton. - -Two type values are equivalent if their underlying types are equal. Since -every type in the Zed type system is uniquely defined, type values are equal -if and only if their corresponding types are uniquely equal. - -The _null_ type is a primitive type representing only a `null` value. -A `null` value can have any type. - -> Note that `time` values correspond to 64-bit epoch nanoseconds and thus -> not every valid RFC 3339 date and time string represents a valid Zed time. -> In addition, nanosecond epoch times overflow on April 11, 2262. -> For the world of 2262, a new epoch can be created well in advance -> and the old time epoch and new time epoch can live side by side with -> the old using a named type for the new epoch time referring to the old `time`. -> An app that wants more than 64 bits of timestamp precision can always use -> a named type of a `bytes` type and do its own conversions to and from the -> corresponding bytes values. A time with a local time zone can be represented -> as a Zed record of a time field and a zone field - -## 2. Complex Types - -Complex types are composed of primitive types and/or other complex types. -The categories of complex types include: -* _record_ - an ordered collection of zero or more named values called fields, -* _array_ - an ordered sequence of zero or more values called elements, -* _set_ - a set of zero or more unique values called elements, -* _map_ - a collection of zero or more key/value pairs where the keys are of a -uniform type called the key type and the values are of a uniform type called -the value type, -* _union_ - a type representing values whose type is any of a specified collection of two or more unique types, -* _enum_ - a type representing a finite set of symbols typically representing categories, and -* _error_ - any value wrapped as an "error". - -The type system comprises a total order: -* The order of primitive types corresponds to the order in the table above. -* All primitive types are ordered before any complex types. -* The order of complex type categories corresponds to the order above. -* For complex types of the same category, the order is defined below. - -### 2.1 Record - -A record comprises an ordered set of zero or more named values -called "fields". The field names must be unique in a given record -and the order of the fields is significant, e.g., type `{a:string,b:string}` -is distinct from type `{b:string,a:string}`. - -A field name is any UTF-8 string. - -A field value is any Zed value. - -In contrast to many schema-oriented data formats, Zed has no way to specify -a field as "optional" since any field value can be a null value. - -If an instance of a record value omits a value -by dropping the field altogether rather than using a null, then that record -value corresponds to a different record type that elides the field in question. - -A record type is uniquely defined by its ordered list of field-type pairs. - -The type order of two records is as follows: -* Record with fewer columns than other is ordered before the other. -* Records with the same number of columns are ordered as follows according to: - * the lexicographic order of the field names from left to right, - * or if all the field names are the same, the type order of the field types from left to right. - -### 2.2 Array - -An array is an ordered sequence of zero or more Zed values called "elements" -all conforming to the same Zed type. - -An array value may be empty. An empty array may have element type `null`. - -An array type is uniquely defined by its single element type. - -The type order of two arrays is defined as the type order of the -two array element types. - -> Note that mixed-type JSON arrays are representable as a Zed array with -> elements of type union. - -### 2.3 Set - -A set is an unordered sequence of zero or more Zed values called "elements" -all conforming to the same Zed type. - -A set may be empty. An empty set may have element type `null`. - -A set of mixed-type values is representable as a Zed set with -elements of type union. - -A set type is uniquely defined by its single element type. - -The type order of two sets is defined as the type order of the -two set element types. - -### 2.4 Map - -A map represents a list of zero or more key-value pairs, where the keys -have a common Zed type and the values have a common Zed type. - -Each key across an instance of a map value must be a unique value. - -A map value may be empty. - -A map type is uniquely defined by its key type and value type. - -The type order of two map types is as follows: -* the type order of their key types, -* or if they are the same, then the order of their value types. - -### 2.5 Union - -A union represents a value that may be any one of a specific enumeration -of two or more unique Zed types that comprise its "union type". - -A union type is uniquely defined by an ordered set of unique types (which may be -other union types) where the order corresponds to the Zed type system's total order. - -Union values are tagged in that -any instance of a union value explicitly conforms to exactly one of the union's types. -The union tag is an integer indicating the position of its type in the union -type's ordered list of types. - -The type order of two union types is as follows: -* The union type with fewer types than other is ordered before the other. -* Two union types with the same number of types are ordered according to -the type order of the constituent types in left to right order. - -### 2.6 Enum - -An enum represents a symbol from a finite set of one or more unique symbols -referenced by name. An enum name may be any UTF-8 string. - -An enum type is uniquely defined by its ordered set of unique symbols, -where the order is significant, e.g., two enum types -with the same set of symbols but in different order are distinct. - -The type order of two enum types is as follows: -* The enum type with fewer symbols than other is ordered before the other. -* Two enum types with the same number of symbols are ordered according to -the type order of the constituent types in left to right order. - -### 2.7 Error - -An error represents any value designated as an error. - -The type order of an error is the type order of the type of its contained value. - -## 3. Named Type - -A _named type_ is a name for a specific Zed type. -Any value can have a named type and the named type is a distinct type -from the underlying type. A named type can refer to another named type. - -The binding between a named type and its underlying type is local in scope -and need not be unique across a sequence of values. - -A type name may be any UTF-8 string exclusive of primitive type names. - -For example, if "port" is a named type for `uint16`, then two values of -type "port" have the same type but a value of type "port" and a value of type `uint16` -do not have the same type. - -The type order of two named types is the type order of their underlying types. - -> While the Zed data model does not include explicit support for schema versioning, -> named types provide a flexible mechanism to implement versioning -> on top of the Zed serialization formats. For example, a Zed-based system -> could define a naming convention of the form `.` -> where `` is the type name of a record representing the schema -> and `` is a decimal string indicating the version of that schema. -> Since types need only be parsed once per stream -> in the Zed binary serialization formats, a Zed type implementation could -> efficiently support schema versioning using such a convention. - -## 4. Null Values - -All Zed types have a null representation. It is up to an -implementation to decide how external data structures map into and -out of values with nulls. Typically, a null value is either the -zero value or, in the case of record fields, an optional field whose -value is not present, though these semantics are not explicitly -defined by the Zed data model. diff --git a/versioned_docs/version-v1.1.0/formats/zjson.md b/versioned_docs/version-v1.1.0/formats/zjson.md deleted file mode 100644 index 879b896bb..000000000 --- a/versioned_docs/version-v1.1.0/formats/zjson.md +++ /dev/null @@ -1,476 +0,0 @@ ---- -sidebar_position: 4 -sidebar_label: ZJSON ---- - -# ZJSON Specification - -## 1. Introduction - -The [Zed data model](zed.md) -is based on richly typed records with a deterministic column order, -as is implemented by the [ZSON](zson.md), [ZNG](zng.md), and [ZST](zst.md) formats. -Given the ubiquity of JSON, it is desirable to also be able to serialize -Zed data into the JSON format. However, encoding Zed data values -directly as JSON values would not work without loss of information. - -For example, consider this Zed data as [ZSON](zson.md): -``` -{ - ts: 2018-03-24T17:15:21.926018012Z, - a: "hello, world", - b: { - x: 4611686018427387904, - y: 127.0.0.1 - } -} -``` -A straightforward translation to JSON might look like this: -``` -{ - "ts": 1521911721.926018012, - "a": "hello, world", - "b": { - "x": 4611686018427387904, - "y": "127.0.0.1" - } -} -``` -But, when this JSON is transmitted to a JavaScript client and parsed, -the result looks something like this: -``` -{ - "ts": 1521911721.926018, - "a": "hello, world", - "b": { - "x": 4611686018427388000, - "y": "127.0.0.1" - } -} -``` -The good news is the `a` field came through just fine, but there are -a few problems with the remaining fields: -* the timestamp lost precision (due to 53 bits of mantissa in a JavaScript -IEEE 754 floating point number) and was converted from a time type to a number, -* the int64 lost precision for the same reason, and -* the IP address has been converted to a string. - -As a comparison, Python's `json` module handles the 64-bit integer to full -precision, but loses precision on the floating point timestamp. -Also, it is at the whim of a JSON implementation whether -or not the order of object keys is preserved. - -While JSON is well suited for data exchange of generic information, it is not -so appropriate for a [super-structured data model](./README.md#2-zed-a-super-structured-pattern) -like Zed. That said, JSON can be used as an encoding format for Zed by mapping Zed data -onto a JSON-based protocol. This allows clients like web apps or -Electron apps to receive and understand Zed and, with the help of client -libraries like [zed-js](https://github.com/brimdata/zealot/tree/main/packages/zed-js), -to manipulate the rich, structured Zed types that are implemented on top of -the basic JavaScript types. - -In other words, -because JSON objects do not have a deterministic column order nor does JSON -in general have typing beyond the basics (i.e., strings, floating point numbers, -objects, arrays, and booleans), we decided to encode Zed data with -its embedded type model all in a layer above regular JSON. - -## 2. The Format - -The format for representing Zed in JSON is called ZJSON. -Converting ZSON, ZNG, or ZST to ZJSON and back results in a complete and -accurate restoration of the original Zed data. - -A ZJSON stream is defined as a sequence of JSON objects where each object -represents a Zed value and has the form: -``` -{ - "type": , - "value": -} -``` -The type and value fields are encoded as defined below. - -### 2.1 Type Encoding - -The type encoding for a primitive type is simply its [Zed type name](zed.md#1-primitive-types) -e.g., "int32" or "string". - -Complex types are encoded with small-integer identifiers. -The first instance of a unique type defines the binding between the -integer identifier and its definition, where the definition may recursively -refer to earlier complex types by their identifiers. - -For example, the Zed type `{s:string,x:int32}` has this ZJSON format: -``` -{ - "id": 123, - "kind": "record", - "fields": [ - { - "name": "s", - "type": { - "kind": "primitive", - "name": "string" - } - }, - { - "name": "x", - "type": { - "kind": "primitive", - "name": "int32" - } - } - ] -} -``` - -A previously defined complex type may be referred to using a reference of the form: -``` -{ - "kind": "ref", - "id": 123 -} -``` - -#### 2.1.1 Record Type - -A record type is a JSON object of the form -``` -{ - "id": , - "kind": "record", - "fields": [ , , ... ] -} -``` -where each of the fields has the form -``` -{ - "name": , - "type": , -} -``` -and `` is a string defining the column name and `` is a -recursively encoded type. - -#### 2.1.2 Array Type - -An array type is defined by a JSON object having the form -``` -{ - "id": , - "kind": "array", - "type": -} -``` -where `` is a recursively encoded type. - -#### 2.1.3 Set Type - -A set type is defined by a JSON object having the form -``` -{ - "id": , - "kind": "set", - "type": -} -``` -where `` is a recursively encoded type. - -#### 2.1.4 Map Type - -A map type is defined by a JSON object of the form -``` -{ - "id": , - "kind": "map", - "key_type": , - "val_type": -} -``` -where each `` is a recursively encoded type. - -#### 2.1.5 Union type - -A union type is defined by a JSON object having the form -``` -{ - "id": , - "kind": "union", - "types": [ , , ... ] -} -``` -where the list of types comprise the types of the union and -and each ``is a recursively encoded type. - -#### 2.1.6 Enum Type - -An enum type is a JSON object of the form -``` -{ - "id": , - "kind": "enum", - "symbols": [ , , ... ] -} -``` -where the unique `` values define a finite set of symbols. - -#### 2.1.7 Error Type - -An error type is a JSON object of the form -``` -{ - "id": , - "kind": "error", - "type": -} -``` -where `` is a recursively encoded type. - -#### 2.1.8 Named Type - -A named type is encoded as a binding between a name and a Zed type -and represents a new type so named. A type definition type has the form -``` -{ - "id": , - "kind": "named", - "name": , - "type": , -} -``` -where `` is a JSON string representing the newly defined type name -and `` is a recursively encoded type. - -### 2.2 Value Encoding - -The primitive values comprising an arbitrarily complex Zed data value are encoded -as a JSON array of strings mixed with nested JSON arrays whose structure -conforms to the nested structure of the value's schema as follows: -* each record, array, and set is encoded as a JSON array of its composite values, -* a union is encoded as a string of the form `:` where `tag` -is an integer string representing the positional index in the union's list of -types that specifies the type of ``, which is a JSON string or array -as described recursively herein, -* a map is encoded as a JSON array of two-element arrays of the form -`[ , ]` where `key` and `value` are recursively encoded, -* a type value is encoded [as above](#21-type-encoding), -* each primitive that is not a type value -is encoded as a string conforming to its ZSON representation, as described in the -[corresponding section of the ZSON specification](zson.md#23-primitive-values). - -For example, a record with three columns --- a string, an array of integers, -and an array of union of string, and float64 --- might have a value that looks like this: -``` -[ "hello, world", ["1","2","3","4"], ["1:foo", "0:10" ] ] -``` - -## 3. Object Framing - -A ZJSON file is composed of ZJSON objects formatted as -[newline delimited JSON (NDJSON)](http://ndjson.org/). -e.g., the [zq](../commands/zq.md) CLI command -writes its ZJSON output as lines of NDJSON. - -## 4. Example - -Here is an example that illustrates values of a repeated type, -nesting, records, array, and union. Consider the file `input.zson`: - -```mdtest-input input.zson -{s:"hello",r:{a:1,b:2}} -{s:"world",r:{a:3,b:4}} -{s:"hello",r:{a:[1,2,3]}} -{s:"goodnight",r:{x:{u:"foo"((string,int64))}}} -{s:"gracie",r:{x:{u:12((string,int64))}}} -``` - -This data is represented in ZJSON as follows: - -```mdtest-command -zq -f zjson input.zson | jq . -``` - -```mdtest-output -{ - "type": { - "kind": "record", - "id": 31, - "fields": [ - { - "name": "s", - "type": { - "kind": "primitive", - "name": "string" - } - }, - { - "name": "r", - "type": { - "kind": "record", - "id": 30, - "fields": [ - { - "name": "a", - "type": { - "kind": "primitive", - "name": "int64" - } - }, - { - "name": "b", - "type": { - "kind": "primitive", - "name": "int64" - } - } - ] - } - } - ] - }, - "value": [ - "hello", - [ - "1", - "2" - ] - ] -} -{ - "type": { - "kind": "ref", - "id": 31 - }, - "value": [ - "world", - [ - "3", - "4" - ] - ] -} -{ - "type": { - "kind": "record", - "id": 34, - "fields": [ - { - "name": "s", - "type": { - "kind": "primitive", - "name": "string" - } - }, - { - "name": "r", - "type": { - "kind": "record", - "id": 33, - "fields": [ - { - "name": "a", - "type": { - "kind": "array", - "id": 32, - "type": { - "kind": "primitive", - "name": "int64" - } - } - } - ] - } - } - ] - }, - "value": [ - "hello", - [ - [ - "1", - "2", - "3" - ] - ] - ] -} -{ - "type": { - "kind": "record", - "id": 38, - "fields": [ - { - "name": "s", - "type": { - "kind": "primitive", - "name": "string" - } - }, - { - "name": "r", - "type": { - "kind": "record", - "id": 37, - "fields": [ - { - "name": "x", - "type": { - "kind": "record", - "id": 36, - "fields": [ - { - "name": "u", - "type": { - "kind": "union", - "id": 35, - "types": [ - { - "kind": "primitive", - "name": "int64" - }, - { - "kind": "primitive", - "name": "string" - } - ] - } - } - ] - } - } - ] - } - } - ] - }, - "value": [ - "goodnight", - [ - [ - [ - "1", - "foo" - ] - ] - ] - ] -} -{ - "type": { - "kind": "ref", - "id": 38 - }, - "value": [ - "gracie", - [ - [ - [ - "0", - "12" - ] - ] - ] - ] -} -``` diff --git a/versioned_docs/version-v1.1.0/formats/zng.md b/versioned_docs/version-v1.1.0/formats/zng.md deleted file mode 100644 index 9970076e2..000000000 --- a/versioned_docs/version-v1.1.0/formats/zng.md +++ /dev/null @@ -1,646 +0,0 @@ ---- -sidebar_position: 1 -sidebar_label: ZNG ---- - -# ZNG Specification - -## 1. Introduction - -ZNG (pronounced "zing") is an efficient, sequence-oriented serialization format for any data -conforming to the [Zed data model](zed.md). - -ZNG is "row oriented" and -analogous to [Apache Avro](https://avro.apache.org) but does not -require schema definitions as it instead utilizes the fine-grained type system -of the Zed data model. -This binary format is based on machine-readable data types with an -encoding methodology inspired by Avro, -[Parquet](https://en.wikipedia.org/wiki/Apache_Parquet), and -[Protocol Buffers](https://developers.google.com/protocol-buffers). - -To this end, ZNG embeds all type information -in the stream itself while having a binary serialization format that -allows "lazy parsing" of fields such that -only the fields of interest in a stream need to be deserialized and interpreted. -Unlike Avro, ZNG embeds its "schemas" in the data stream as Zed types and thereby admits -an efficient multiplexing of heterogeneous data types by prepending to each -data value a simple integer identifier to reference its type. - -Since no external schema definitions exist in ZNG, a "type context" is constructed -on the fly by composing dynamic type definitions embedded in the ZNG format. -ZNG can be readily adapted to systems like -[Apache Kafka](https://kafka.apache.org/) which utilize schema registries, -by having a connector translate the schemas implied in the -ZNG stream into registered schemas and vice versa. Better still, Kafka could -be used natively with ZNG obviating the need for the schema registry. - -Multiple ZNG streams with different type contexts are easily merged because the -serialization of values does not depend on the details of -the type context. One or more streams can be merged by simply merging the -input contexts into an output context and adjusting the type reference of -each value in the output ZNG sequence. The values need not be traversed -or otherwise rewritten to be merged in this fashion. - -## 2. The ZNG Format - -A ZNG stream comprises a sequence of frames where -each frame contains one of three types of data: -_types_, _values_, or externally-defined _control_. - -A stream is punctuated by the end-of-stream value `0xff`. - -Each frame header includes a length field -allowing an implementation to easily skip from frame to frame. - -Each frame begins with a single-byte "frame code": -``` - 7 6 5 4 3 2 1 0 - +-+-+-+-+-+-+-+-+ - |V|C| T| L| - +-+-+-+-+-+-+-+-+ - - V: 1 bit - - Version number. Must be zero. - - C: 1 bit - - Indicates compressed frame data. - - T: 2 bits - - Type of frame data. - - 00: Types - 01: Values - 10: Control - 11: End of stream - - L: 4 bits - - Low-order bits of frame length. -``` - -Bit 7 of the frame code must be zero as it defines version 0 -of the ZNG stream format. If a future version of ZNG -arises, bit 7 of future ZNG frames will be 1. -ZNG version 0 readers must ignore and skip over such frames using the -`len` field, which must survive future versions. -Any future versions of ZNG must be able to integrate version 0 frames -for backward compatibility. - -Following the frame code is its encoded length followed by a "frame payload" -of bytes of said length: -``` - -``` -The length encoding utilizes a variable-length unsigned integer called herein a `uvarint`: - -> Inspired by Protocol Buffers, -> a `uvarint` is an unsigned, variable-length integer encoded as a sequence of -> bytes consisting of N-1 bytes with bit 7 clear and the Nth byte with bit 7 set, -> whose value is the base-128 number composed of the digits defined by the lower -> 7 bits of each byte from least-significant digit (byte 0) to -> most-significant digit (byte N-1). - -The frame payload's length is equal to the value of the `uvarint` following the -frame code times 16 plus the low 4-bit integer value `L` field in the frame code. - -If the `C` bit is set in the frame code, then the frame payload following the -frame length is compressed and has the form: -``` - -``` -where -* `` is a single byte indicating the compression format of the the compressed payload, -* `` is a `uvarint` encoding the size of the uncompressed payload, and -* `` is a bytes sequence whose length equals -the outer frame length less 1 byte for the compression format and the encoded length -of the `uvarint` size field. - -The `compressed payload` is compressed according to the compression algorithm -specified by the `format` byte. Each frame is compressed independently -such that the compression algorithm's state is not carried from frame to frame -(thereby enabling parallel decoding). - -The `` value is redundant with the compressed payload -but is useful to an implementation to deterministically -size decompression buffers in advance of decoding. - -Values for the `format` byte are defined in the -[ZNG compression format specification](./compression.md). - -> This arrangement of frames separating types and values allows -> for efficient scanning and parallelization. In general, values depend -> on type definitions but as long as all of the types are known when -> values are used, decoding can be done in parallel. Likewise, since -> each block is independently compressed, the blocks can be decompressed -> in parallel. Moreover, efficient filtering can be carried out over -> uncompressed data before it is deserialized into native data structures, -> e.g., allowing entire frames to be discarded based on -> heuristics, e.g., knowing a filtering predicate can't be true based on a -> quick scan of the data perhaps using the Boyer-Moore algorithm to determine -> that a comparison with a string constant would not work for any -> value in the buffer. - -Whether the payload was originally uncompressed or was decompressed, it is -then interpreted according to the `T` bits of the frame code as a -* [types frame](#21-types-frame), -* [values frame](#22-values-frame), or -* [control frame](#23-control-frame). - -### 2.1 Types Frame - -A _types frame_ encodes a sequence of type definitions for complex Zed types -and establishes a "type ID" for each such definition. -Type IDs for the "primitive types" -are predefined with the IDs listed in the [Primitive Types](#3-primitive-types) table. - -Each definition, or "typedef", -consists of a typedef code followed by its type-specific encoding as described below. -Each type must be decoded in sequence to find the start of the next type definition -as there is no framing to separate the typedefs. - -The typedefs are numbered in the order encountered starting at 30 -(as the largest primary type ID is 29). Types refer to other types -by their type ID. Note that the type ID of a typedef is implied by its -position in the sequence and is not explicitly encoded. - -The typedef codes are defined as follows: - -| Code | Complex Type | -|------|--------------------------| -| 0 | record type definition | -| 1 | array type definition | -| 2 | set type definition | -| 3 | map type definition | -| 4 | union type definition | -| 5 | enum type definition | -| 6 | error type definition | -| 7 | named type definition | - -Any references to a type ID in the body of a typedef are encoded as a `uvarint`, - -#### 2.1.1 Record Typedef - -A record typedef creates a new type ID equal to the next stream type ID -with the following structure: -``` ---------------------------------------------------------- -|0x00||...| ---------------------------------------------------------- -``` -Record types consist of an ordered set of columns where each column consists of -a name and its type. Unlike JSON, the ordering of the columns is significant -and must be preserved through any APIs that consume, process, and emit ZNG records. - -A record type is encoded as a count of fields, i.e., `` from above, -followed by the field definitions, -where a field definition is a field name followed by a type ID, i.e., -`` followed by `` etc. as indicated above. - -The field names in a record must be unique. - -The `` value is encoded as a `uvarint`. - -The field name is encoded as a UTF-8 string defining a "ZNG identifier". -The UTF-8 string -is further encoded as a "counted string", which is the `uvarint` encoding -of the length of the string followed by that many bytes of UTF-8 encoded -string data. - -N.B.: As defined by [ZSON](zson.md), a field name can be any valid UTF-8 string much like JSON -objects can be indexed with arbitrary string keys (via index operator) -even if the field names available to the dot operator are restricted -by language syntax for identifiers. - -The type ID follows the field name and is encoded as a `uvarint`. - -#### 2.1.2 Array Typedef - -An array type is encoded as simply the type code of the elements of -the array encoded as a `uvarint`: -``` ----------------- -|0x01|| ----------------- -``` - -#### 2.1.3 Set Typedef - -A set type is encoded as the type ID of the -elements of the set, encoded as a `uvarint`: -``` ----------------- -|0x02|| ----------------- -``` - -#### 2.1.4 Map Typedef - -A map type is encoded as the type code of the key -followed by the type code of the value. -``` --------------------------- -|0x03||| --------------------------- -``` -Each `` is encoded as `uvarint`. - -#### 2.1.5 Union Typedef - -A union typedef creates a new type ID equal to the next stream type ID -with the following structure: -``` ------------------------------------------ -|0x04||...| ------------------------------------------ -``` -A union type consists of an ordered set of types -encoded as a count of the number of types, i.e., `` from above, -followed by the type IDs comprising the types of the union. -The type IDs of a union must be unique. - -The `` and the type IDs are all encoded as `uvarint`. - -`` cannot be 0. - -#### 2.1.6 Enum Typedef - -An enum type is encoded as a `uvarint` representing the number of symbols -in the enumeration followed by the names of each symbol. -``` --------------------------------- -|0x05||...| --------------------------------- -``` -`` is encoded as `uvarint`. -The names have the same UTF-8 format as record field names and are encoded -as counted strings following the same convention as record field names. - -#### 2.1.7 Error Typedef - -An error type is encoded as follows: -``` ----------------- -|0x06|| ----------------- -``` -which defines a new error type for error values that have the underlying type -indicated by ``. - -#### 2.1.8 Named Type Typedef - -A named type defines a new type ID that binds a name to a previously existing type ID. - -A named type is encoded as follows: -``` ----------------------- -|0x07|| ----------------------- -``` -where `` is an identifier representing the new type name with a new type ID -allocated as the next available type ID in the stream that refers to the -existing type ID ``. `` is encoded as a `uvarint` and `` -is encoded as a `uvarint` representing the length of the name in bytes, -followed by that many bytes of UTF-8 string. - -As indicated in the [data model](zed.md), -it is an error to define a type name that has the same name as a primitive type, -and it is permissible to redefine a previously defined type name with a -type that differs from the previous definition. - -### 2.2 Values Frame - -A _values frame_ is a sequence of Zed values each encoded as the value's type ID, -encoded as a `uvarint`, followed by its tag-encoded serialization as described below. - -Since a single type ID encodes the entire value's structure, no additional -type information is needed. Also, the value encoding follows the structure -of the type explicitly so the type is not needed to parse the structure of the -value, but rather only its semantics. - -It is an error for a value to reference a type ID that has not been -previously defined by a typedef scoped to the stream in which the value -appears. - -The value is encoded using a "tag-encoding" scheme -that captures the structure of both primitive types and the recursive -nature of complex types. This structure is encoded -explicitly in every value and the boundaries of each value and its -recursive nesting can be parsed without knowledge of the type or types of -the underlying values. This admits an efficient implementation -for traversing the values, inclusive of recursive traversal of complex values, -whereby the inner loop need not consult and interpret the type ID of each element. - -#### 2.2.1 Tag-Encoding of Values - -Each value is prefixed with a "tag" that defines: -* whether it is the null value, and -* its encoded length in bytes. - -The tag is 0 for the null value and `length+1` for non-null values where -`length` is the encoded length of the value. Note that this encoding -differentiates between a null value and a zero-length value. Many data types -have a meaningful interpretation of a zero-length value, for example, an -empty array, the empty record, etc. - -The tag itself is encoded as a `uvarint`. - -#### 2.2.2 Tag-Encoded Body of Primitive Values - -Following the tag encoding is the value encoded in N bytes as described above. -A typed value with a `value` of length `N` is interpreted as described in the -[Primitive Types](#3-primitive-types) table. The type information needed to -interpret all of the value elements of a complex type are all implied by the -top-level type ID of the values frame. For example, the type ID could indicate -a particular record type, which recursively provides the type information -for all of the elements within that record, including other complex types -embedded within the top-level record. - -Note that because the tag indicates the length of the value, there is no need -to use varint encoding of integer values. Instead, an integer value is encoded -using the full 8 bits of each byte in little-endian order. Signed values, -before encoding, are shifted left one bit, and the sign bit stored as bit 0. -For negative numbers, the remaining bits are negated so that the upper bytes -tend to be zero-filled for small integers. - -#### 2.2.3 Tag-Encoded Body of Complex Values - -The body of a length-N container comprises zero or more tag-encoded values, -where the values are encoded as follows: - -| Type | Value | -|----------|-----------------------------------------| -| `array` | concatenation of elements | -| `set` | normalized concatenation of elements | -| `record` | concatenation of elements | -| `map` | concatenation of key and value elements | -| `union` | concatenation of selector and value | -| `enum` | position of enum element | -| `error` | wrapped element | - -Since N, the byte length of any of these container values, is known, -there is no need to encode a count of the -elements present. Also, since the type ID is implied by the typedef -of any complex type, each value is encoded without its type ID. - -For sets, the concatenation of elements must be normalized so that the -sequence of bytes encoding each element's tag-counted value is -lexicographically greater than that of the preceding element. - -A union value is encoded as a container with two elements. The first -element, called the selector, is the `uvarint` encoding of the -positional index determining the type of the value in reference to the -union's list of defined types, and the second element is the value -encoded according to that type. - -An enumeration value is represented as the `uvarint` encoding of the -positional index of that value's symbol in reference to the enum's -list of defined symbols. - -A map value is encoded as a container whose elements are alternating -tag-encoded keys and values, with keys and values encoded according to -the map's key type and value type, respectively. - -The concatenation of elements must be normalized so that the -sequence of bytes encoding each tag-counted key (of the key/value pair) is -lexicographically greater than that of the preceding key (of the preceding -key/value pair). - -### 2.3 Control Frame - -A _control frame_ contains an application-defined control message. - -Control frames are available to higher-layer protocols and are carried -in ZNG as a convenient signaling mechanism. A ZNG implementation -may skip over all control frames and is guaranteed by -this specification to decode all of the data as described herein even if such -frames provide additional semantics on top of the base ZNG format. - -The body of a control frame is a control message and may be JSON, -ZSON, ZNG, binary, or UTF-8 text. The serialization of the control -frame body is independent of the ZNG stream containing the control -frame. - -Any control message not known by a ZNG data receiver shall be ignored. - -The delivery order of control messages with respect to the delivery -order of values of the ZNG stream should be preserved by an API implementing -ZNG serialization and deserialization. -In this way, system endpoints that communicate using ZNG can embed -protocol directives directly into the ZNG stream as control payloads -in an order-preserving semantics rather than defining additional -layers of encapsulation and synchronization between such layers. - -A control frame has the following form: -``` -------------------------- -|||| -------------------------- -``` -where -* `` is a single byte indicating whether the body is encoded -as ZNG (0), JSON (1), ZSON (2), an arbitrary UTF-8 string (3), or arbitrary binary data (4), -* `` is a `uvarint` encoding the length in bytes of the body -(exclusive of the length 1 encoding byte), and -* `` is a control message whose semantics are outside the scope of -the base ZNG specification. - -If the encoding type is ZNG, the embedded ZNG data -starts and ends a single ZNG stream independent of the outer ZNG stream. - -### 2.4 End of Stream - -A ZNG stream must be terminated by an end-of-stream marker. -A new ZNG stream may begin immediately after an end-of-stream marker. -Each such stream has its own, independent type context. - -In this way, the concatenation of ZNG streams (or ZNG files containing -ZNG streams) results in a valid ZNG data sequence. - -For example, a large ZNG file can be arranged into multiple, smaller streams -to facilitate random access at stream boundaries. -This benefit comes at the cost of some additional overhead -- -the space consumed by stream boundary markers and repeated type definitions. -Choosing an appropriate stream size that balances this overhead with the -benefit of enabling random access is left up to implementations. - -End-of-stream markers are also useful in the context of sending ZNG over Kafka, -as a receiver can easily resynchronize with a live Kafka topic by -discarding incomplete frames until a frame is found that is terminated -by an end-of-stream marker (presuming the sender implementation aligns -the ZNG frames on Kafka message boundaries). - -A end-of-stream marker is encoded as follows: -``` ------- -|0xff| ------- -``` - -After this marker, all previously read -typedefs are invalidated and the "next available type ID" is reset to -the initial value of 30. To represent subsequent values that use a -previously defined type, the appropriate typedef control code must -be re-emitted -(and note that the typedef may now be assigned a different ID). - -## 3. Primitive Types - -For each ZNG primitive type, the following table describes: -* its type ID, and -* the interpretation of a length `N` [value frame](#22-values-frame). - -All fixed-size multi-byte sequences representing machine words -are serialized in little-endian format. - -| Type | ID | N | ZNG Value Interpretation | -|--------------|---:|:--------:|------------------------------------------------| -| `uint8` | 0 | variable | unsigned int of length N | -| `uint16` | 1 | variable | unsigned int of length N | -| `uint32` | 2 | variable | unsigned int of length N | -| `uint64` | 3 | variable | unsigned int of length N | -| `uint128` | 4 | variable | unsigned int of length N | -| `uint256` | 5 | variable | unsigned int of length N | -| `int8` | 6 | variable | signed int of length N | -| `int16` | 7 | variable | signed int of length N | -| `int32` | 8 | variable | signed int of length N | -| `int64` | 9 | variable | signed int of length N | -| `int128` | 10 | variable | signed int of length N | -| `int256` | 11 | variable | signed int of length N | -| `duration` | 12 | variable | signed int of length N as ns | -| `time` | 13 | variable | signed int of length N as ns since epoch | -| `float16` | 14 | 2 | 2 bytes of IEEE 64-bit format | -| `float32` | 15 | 4 | 4 bytes of IEEE 64-bit format | -| `float64` | 16 | 8 | 8 bytes of IEEE 64-bit format | -| `float128` | 17 | 16 | 16 bytes of IEEE 64-bit format | -| `float256` | 18 | 32 | 32 bytes of IEEE 64-bit format | -| `decimal32` | 19 | 4 | 4 bytes of IEEE decimal format | -| `decimal64` | 20 | 8 | 8 bytes of IEEE decimal format | -| `decimal128` | 21 | 16 | 16 bytes of IEEE decimal format | -| `decimal256` | 22 | 32 | 32 bytes of IEEE decimal format | -| `bool` | 23 | 1 | one byte 0 (false) or 1 (true) | -| `bytes` | 24 | variable | N bytes of value | -| `string` | 25 | variable | UTF-8 byte sequence | -| `ip` | 26 | 4 or 16 | 4 or 16 bytes of IP address | -| `net` | 27 | 8 or 32 | 8 or 32 bytes of IP prefix and subnet mask | -| `type` | 28 | variable | type value byte sequence [as defined below](#4-type-values) | -| `null` | 29 | 0 | No value, always represents an undefined value | - -## 4. Type Values - -As the ZSON data model supports first-class types and because the ZNG design goals -require that value serializations cannot change across type contexts, type values -must be encoded in a fashion that is independent of the type context. -Thus, a serialized type value encodes the entire type in a canonical form -according to the recursive definition in this section. - -The type value of a primitive type (include type `type`) is its primitive ID, -serialized as a single byte. - -The type value of a complex type is serialized recursively according to the -complex type it represents as described below. - -#### 4.1 Record Type Value - -A record type value has the form: -``` ---------------------------------------------------- -|30||...| ---------------------------------------------------- -``` -where `` is the number of columns in the record encoded as a `uvarint`, -`` etc. are the field names encoded as in the -record typedef, and each `` is a recursive encoding of a type value. - -#### 4.2 Array Type Value - -An array type value has the form: -``` --------------- -|31|| --------------- -``` -where `` is a recursive encoding of a type value. - -#### 4.3 Set Type Value - -An set type value has the form: -``` --------------- -|32|| --------------- -``` -where `` is a recursive encoding of a type value. - -#### 4.4 Map Type Value - -A map type value has the form: -``` --------------------------- -|33||| --------------------------- -``` -where `` and `` are recursive encodings of type values. - -#### 4.5 Union Type Value - -A union type value has the form: -``` ------------------------------------ -|34||...| ------------------------------------ -``` -where `` is the number of types in the union encoded as a `uvarint` -and each `` is a recursive definition of a type value. - -#### 4.6 Enum Type Value - -An enum type value has the form: -``` ------------------------------- -|35||...| ------------------------------- -``` -where `` and each symbol name is encoded as in an enum typedef. - -#### 4.7 Error Type Value - -An error type value has the form: -``` ------------ -|36|| ------------ -``` -where `` is the type value of the error. - -#### 4.8 Named Type Type Value - -A named type type value may appear either as a definition or a reference. -When a named type is referenced, it must have been previously -defined in the type value in accordance with a left-to-right depth-first-search (DFS) -traversal of the type. - -A named type definition has the form: -``` --------------------- -|37|| --------------------- -``` -where `` is encoded as in an named type typedef -and `` is a recursive encoding of a type value. This creates -a binding between the given name and the indicated type value only within the -scope of the encoded value and does not affect the type context. -This binding may be changed by another named type definition -of the same name in the same type value according to the DFS order. - -An named type reference has the form: -``` ------------ -|38|| ------------ -``` -It is an error for an named type reference to appear in a type value with a name -that has not been previously defined according to the DFS order. diff --git a/versioned_docs/version-v1.1.0/formats/zson.md b/versioned_docs/version-v1.1.0/formats/zson.md deleted file mode 100644 index 66ff64aeb..000000000 --- a/versioned_docs/version-v1.1.0/formats/zson.md +++ /dev/null @@ -1,572 +0,0 @@ ---- -sidebar_position: 2 -sidebar_label: ZSON ---- - -# ZSON Specification - -## 1. Introduction - -ZSON is the human-readable, text-based serialization format of -the super-structured [Zed data model](zed.md). - -ZSON builds upon the elegant simplicity of JSON with "type decorators". -Where the type of a value is not implied by its syntax, a parenthesized -type decorator is appended to the value thus establishing a well-defined -type for every value expressed in ZSON text. - -ZSON is also a superset of JSON in that all JSON documents are valid ZSON values. - -## 2. The ZSON Format - -A ZSON text is a sequence of UTF-8 characters organized either as a bounded input -or an unbounded stream. - -The input text is organized as a sequence of one or more Zed values optionally -separated by and interspersed with whitespace. -Single-line (`//`) and multi-line (`/* ... */`) comments are -treated as whitespace and ignored. - -All subsequent references to characters and strings in this section refer to -the Unicode code points that result when the stream is decoded. -If a ZSON input includes data that is not valid UTF-8, the input is invalid. - -### 2.1 Names - -ZSON _names_ encode record fields, enum symbols, and named types. -A name is either an _identifier_ or a [quoted string](#231-strings). -Names are referred to as `` below. - -An _identifier_ is case-sensitive and can contain Unicode letters, `$`, `_`, -and digits (0-9), but may not start with a digit. An identifier cannot be -`true`, `false`, or `null`. - -### 2.2 Type Decorators - -A value may be explicitly typed by tagging it with a type decorator. -The syntax for a decorator is a parenthesized type: -``` - ( ) -``` -For union values, multiple decorators might be -required to distinguish the union-member type from the possible set of -union types when there is ambiguity, as in -``` -123. (float32) ((int64,float32,float64)) -``` -In contrast, this union value is unambiguous: -``` -123. ((int64,float64)) -``` - -The syntax of a union value decorator is -``` - ( ) [ ( ) ...] -``` -where the rightmost type must be a union type if more than one decorator -is present. - -A decorator may also define a [named type](#258-named-type): -``` - ( = ) -``` -which declares a new type with the indicated type name using the -implied type of the value. - -It is an error for the decorator to be type incompatible with its referenced value. - -Note that the `=` sigil here disambiguates between the case that a new -type is defined, which may override a previous definition of a different type with the -same name, from the case that an existing named type is merely decorating the value. - -### 2.3 Primitive Values - -The type names and format for -[Zed primitive](zed.md#1-primitive-types) values is as follows: - -| Type | Value Format | -|------------|---------------------------------------------------------------| -| `uint8` | decimal string representation of any unsigned, 8-bit integer | -| `uint16` | decimal string representation of any unsigned, 16-bit integer | -| `uint32` | decimal string representation of any unsigned, 32-bit integer | -| `uint64` | decimal string representation of any unsigned, 64-bit integer | -| `uint128` | decimal string representation of any unsigned, 128-bit integer | -| `uint256` | decimal string representation of any unsigned, 256-bit integer | -| `int8` | decimal string representation of any signed, 8-bit integer | -| `int16` | decimal string representation of any signed, 16-bit integer | -| `int32` | decimal string representation of any signed, 32-bit integer | -| `int64` | decimal string representation of any signed, 64-bit integer | -| `int128` | decimal string representation of any signed, 128-bit integer | -| `int256` | decimal string representation of any signed, 256-bit integer | -| `duration` | a _duration string_ representing signed 64-bit nanoseconds | -| `time` | an RFC 3339 UTC date/time string representing signed 64-bit nanoseconds from epoch | -| `float16` | a _non-integer string_ representing an IEEE-754 binary16 value | -| `float32` | a _non-integer string_ representing an IEEE-754 binary32 value | -| `float64` | a _non-integer string_ representing an IEEE-754 binary64 value | -| `float128` | a _non-integer string_ representing an IEEE-754 binary128 value | -| `float256` | a _non-integer string_ representing an IEEE-754 binary256 value | -| `decimal32` | a _non-integer string_ representing an IEEE-754 decimal32 value | -| `decimal64` | a _non-integer string_ representing an IEEE-754 decimal64 value | -| `decimal128` | a _non-integer string_ representing an IEEE-754 decimal128 value | -| `decimal256` | a _non-integer string_ representing an IEEE-754 decimal256 value | -| `bool` | the string `true` or `false` | -| `bytes` | a sequence of bytes encoded as a hexadecimal string prefixed with `0x` | -| `string` | a double-quoted or backtick-quoted UTF-8 string | -| `ip` | a string representing an IP address in [IPv4 or IPv6 format](https://tools.ietf.org/html/draft-main-ipaddr-text-rep-02#section-3) | -| `net` | a string in CIDR notation representing an IP address and prefix length as defined in RFC 4632 and RFC 4291. | -| `type` | a string in canonical form as described in [Section 2.5](#25-types) | -| `null` | the string `null` | - -The format of a _duration string_ -is an optionally-signed concatenation of decimal numbers, -each with optional fraction and a unit suffix, -such as "300ms", "-1.5h" or "2h45m", representing a 64-bit nanosecond value. -Valid time units are -"ns" (nanosecond), -"us" (microsecond), -"ms" (millisecond), -"s" (second), -"m" (minute), -"h" (hour), -"d" (day), -"w" (7 days), and -"y" (365 days). -Note that each of these time units accurately represents its calendar value, -except for the "y" unit, which does not reflect leap years and so forth. -Instead, "y" is defined as the number of nanoseconds in 365 days. - -The format of floating point values is a _non-integer string_ -conforming to any floating point representation that cannot be -interpreted as an integer, e.g., `1.` or `1.0` instead of -`1` or `1e3` instead of `1000`. Unlike JSON, a floating point number can -also be one of: -`Inf`, `+Inf`, `-Inf`, or `Nan`. - -A floating point value may be expressed with an integer string provided -a type decorator is applied, e.g., `123 (float64)`. - -Decimal values require type decorators. - -A string may be backtick-quoted with the backtick character `` ` ``. -None of the text between backticks is escaped, but by default, any newlines -followed by whitespace are converted to a single newline and the first -newline of the string is deleted. To avoid this automatic deletion and -preserve indentation, the backtick-quoted string can be preceded with `=>`. - -Of the 30 primitive types, eleven of them represent _implied-type_ values: -`int64`, `time`, `duration`, `float64`, `bool`, `bytes`, `string`, `ip`, `net`, `type`, and `null`. -Values for these types are determined by the format of the value and -thus do not need decorators to clarify the underlying type, e.g., -``` -123 (int64) -``` -is the same as `123`. - -Values that do not have implied types must include a type decorator to clarify -its type or appear in a context for which its type is defined (i.e., as a field -value in a record, as an element in an array, etc.). - -While a `type` value may represent a complex type, the value itself is a singleton -and thus always a primitive type. A `type` value is encoded as: -* a left angle bracket `<`, followed by -* a type as [encoded below](#25-types), followed by -* a right angle bracket `>`. - -A `time` value corresponds to 64-bit Unix epoch nanoseconds and thus -not all possible RFC 3339 date/time strings are valid. In addition, -nanosecond epoch times overflow on April 11, 2262. -For the world of 2262, a new epoch can be created well in advance -and the old time epoch and new time epoch can live side by side with -the old using a named type for the new epoch time defined as the old `time` type. -An app that requires more than 64 bits of timestamp precision can always use -a typedef of a `bytes` type and do its own conversions to and from the -corresponding `bytes` values. - -#### 2.3.1 Strings - -Double-quoted `string` syntax is the same as that of JSON as described -in [RFC 8259](https://tools.ietf.org/html/rfc8259#section-7). Notably, -the following escape sequences are recognized: - -| Sequence | Unicode Character | -|----------|------------------------| -| `\"` | quotation mark U+0022 | -| `\\` | reverse solidus U+005C | -| `\/` | solidus U+002F | -| `\b` | backspace U+0008 | -| `\f` | form feed U+000C | -| `\n` | line feed U+000A | -| `\r` | carriage return U+000D | -| `\t` | tab U+0009 | -| `\uXXXX` | U+XXXX | - -In `\uXXXX` sequences, each `X` is a hexadecimal digit, and letter -digits may be uppercase or lowercase. - -The behavior of an implementation that encounters an unrecognized escape -sequence in a `string` type is undefined. - -`\u` followed by anything that does not conform to the above syntax -is not a valid escape sequence. The behavior of an implementation -that encounters such invalid sequences in a `string` type is undefined. - -These escaping rules apply also to quoted field names in record values and -record types as well as enum symbols. - -### 2.4 Complex Values - -Complex values are built from primitive values and/or other complex values -and conform to the Zed data model's complex types: -[record](zed.md#21-record), -[array](zed.md#22-array), -[set](zed.md#23-set), -[map](zed.md#24-map), -[union](zed.md#25-union), -[enum](zed.md#26-enum), and -[error](zed.md#27-error). - -Complex values have an implied type when their constituent values all have -implied types. - -#### 2.4.1 Record Value - -A record value has the form: -``` -{ : , : , ... } -``` -where `` is a [ZSON name](#21-names) and `` is -any optionally-decorated ZSON value inclusive of other records. -Each name/value pair is called a _field_. -There may be zero or more fields. - -#### 2.4.2 Array Value - -An array value has the form: -``` -[ , , ... ] -``` -If the elements of the array are not of uniform type, then the implied type of -the array elements is a union of the types present. - -An array value may be empty. An empty array value without a type decorator is -presumed to be an empty array of type `null`. - -#### 2.4.3 Set Value - -A set value has the form: -``` -|[ , , ... ]| -``` -where the indicated values must be distinct. - -If the elements of the set are not of uniform type, then the implied type of -the set elements is a union of the types present. - -A set value may be empty. An empty set value without a type decorator is -presumed to be an empty set of type `null`. - -#### 2.4.4 Map Value - -A map value has the form: -``` -|{ : , : , ... }| -``` -where zero or more comma-separated, key/value pairs are present. - -Whitespace around keys and values is generally optional, but to -avoid ambiguity, whitespace must separate an IPv6 key from the colon -that follows it. - -An empty map value without a type decorator is -presumed to be an empty map of type `|{null: null}|`. - -#### 2.4.5 Union Value - -A union value is a value that conforms to one of the types within a union type. -If the value appears in a context in which the type is unknown or ambiguous, -then the value must be decorated as [described above](#22-type-decorators). - -#### 2.4.6 Enum Value - -An enum type represents a symbol from a finite set of symbols -referenced by name. - -An enum value is indicated with the sigil `%` and has the form -``` -% -``` -where the `` is [ZSON name](#21-names). - -An enum value must appear in a context where the enum type is known, i.e., -with an explicit enum type decorator or within a complex type where the -contained enum type is defined by the complex type's decorator. - -A sequence of enum values might look like this: -``` -%HEADS (flip=(enum(HEADS,TAILS))) -%TAILS (flip) -%HEADS (flip) -``` - -#### 2.4.7 Error Value - -An error value has the form: -``` -error() -``` -where `` is any ZSON value. - -### 2.5 Types - -A primitive type is simply the name of the primitive type, i.e., `string`, -`uint16`, etc. Complex types are defined as follows. - -#### 2.5.1 Record Type - -A _record type_ has the form: -``` -{ : , : , ... } -``` -where `` is a [ZSON name](#21-names) and -`` is any type. - -The order of the record fields is significant, -e.g., type `{a:int32,b:int32}` is distinct from type `{b:int32,a:int32}`. - -#### 2.5.2 Array Type - -An _array type_ has the form: -``` -[ ] -``` - -#### 2.5.3 Set Type - -A _set type_ has the form: -``` -|[ ]| -``` - -#### 2.5.4 Map Type - -A _map type_ has the form: -``` -|{ : }| -``` -where `` is the type of the keys and `` is the -type of the values. - -#### 2.5.5 Union Type - -A _union type_ has the form: -``` -( , , ... ) -``` -where there are at least two types in the list. - -#### 2.5.6 Enum Type - -An _enum type_ has the form: -``` -enum( , , ... ) -``` -where `` is a [ZSON name](#21-names). -Each enum name must be unique and the order is not significant, e.g., -enum type `enum(HEADS,TAILS)` is equal to type `enum(TAILS,HEADS)`. - -#### 2.5.7 Error Type - -An _error type_ has the form: -``` -error( ) -``` -where `` is the type of the underlying ZSON values wrapped as an error. - -#### 2.5.8 Named Type - -A named type has the form: -``` - = ( ) -``` -where a new type is defined with the given name and type. - -When a named type appears in a complex value, the new type name may be -referenced by any subsequent value in left-to-right depth-first order. - -For example, -``` -{p1:80 (port=(uint16)), p2: 8080 (port)} -```` -is valid but -``` -{p1:80 port, p2: 8080 (port=(uint16))} -```` -is invalid. - -Named types may be redefined, in which case subsequent references -resolve to the most recent definition according to -* sequence order across values, or -* left-to-right depth-first order within a complex value. - -### 2.6 Null Value - -The null value is represented by the string `null`. - -A value of any type can be null. It is up to an -implementation to decide how external data structures map into and -out of null values of different types. Typically, a null value means either the -zero value or, in the case of record fields, an optional field whose -value is not present, though these semantics are not explicitly -defined by ZSON. - -## 3. Examples - -The simplest ZSON value is a single value, perhaps a string like this: -``` -"hello, world" -``` -There's no need for a type declaration here. It's explicitly a string. - -A relational table might look like this: -``` -{ city: "Berkeley", state: "CA", population: 121643 (uint32) } (=city_schema) -{ city: "Broad Cove", state: "ME", population: 806 (uint32) } (=city_schema) -{ city: "Baton Rouge", state: "LA", population: 221599 (uint32) } (=city_schema) -``` -This ZSON text here depicts three record values. It defines a type called `city_schema` -and the inferred type of the `city_schema` has the signature: -``` -{ city:string, state:string, population:uint32 } -``` -When all the values in a sequence have the same record type, the sequence -can be interpreted as a _table_, where the ZSON record values form the _rows_ -and the fields of the records form the _columns_. In this way, these -three records form a relational table conforming to the schema `city_schema`. - -In contrast, a ZSON text representing a semi-structured sequence of log lines -might look like this: -``` -{ - info: "Connection Example", - src: { addr: 10.1.1.2, port: 80 (uint16) } (=socket), - dst: { addr: 10.0.1.2, port: 20130 (uint16) } (=socket) -} (=conn) -{ - info: "Connection Example 2", - src: { addr: 10.1.1.8, port: 80 (uint16) } (=socket), - dst: { addr: 10.1.2.88, port: 19801 (uint16) } (=socket) -} (=conn) -{ - info: "Access List Example", - nets: [ 10.1.1.0/24, 10.1.2.0/24 ] -} (=access_list) -{ metric: "A", ts: 2020-11-24T08:44:09.586441-08:00, value: 120 } -{ metric: "B", ts: 2020-11-24T08:44:20.726057-08:00, value: 0.86 } -{ metric: "A", ts: 2020-11-24T08:44:32.201458-08:00, value: 126 } -{ metric: "C", ts: 2020-11-24T08:44:43.547506-08:00, value: { x:10, y:101 } } -``` -In this case, the first record defines not just a record type -with named type `conn`, but also a second embedded record type called `socket`. -The parenthesized decorators are used where a type is not inferred from -the value itself: -* `socket` is a record with typed fields `addr` and `port` where `port` is an unsigned 16-bit integer, and -* `conn` is a record with typed fields `info`, `src`, and `dst`. - -The subsequent value defines a type called `access_list`. In this case, -the `nets` field is an array of networks and illustrates the helpful range of -primitive types in ZSON. Note that the syntax here implies -the type of the array, as it is inferred from the type of the elements. - -Finally, there are four more values that show ZSON's efficacy for -representing metrics. Here, there are no type decorators as all of the field -types are implied by their syntax, and hence, the top-level record type is implied. -For instance, the `ts` field is an RFC 3339 date and time string, -unambiguously the primitive type `time`. Further, -note that the `value` field takes on different types and even a complex record -type on the last line. In this case, there is a different top-level -record type implied by each of the three variations of type of the `value` field. - -## 4. Grammar - -Here is a left-recursive pseudo-grammar of ZSON. Note that not all -acceptable inputs are semantically valid as type mismatches may arise. -For example, union and enum values must both appear in a context -that defines their type. - -``` - = | | - - = . - - = | | - - = "(" "=" ")" - - = "(" ")" | "(" ")" - - = | | | | | | - - = primitive value as defined above - - = "{" "}" | "{" "}" - - = "," | - - = ":" - - = | - - = quoted string as defined above - - = as defined above - - = "[" "]" | "[" "]" - - = "," | - - = "|[" "]|" | "|[" "]|" - - = "%" ( | ) - - = "|{" "}|" | "|{" "}|" - - = | "," - - = ":" - - = "<" ">" - - = "error(" ")" - - = | | | | - | | | - | | - - = uint8 | uint16 | etc. as defined above - - = "{" "}" | "{" "}" - - = "," | - - = ":" - - = "[" "]" | "[" "]" - - = "|[" "]|" | "|[" "]|" - - = "(" "," ")" - - = "," | - - = "enum(" ")" - - = "," | - - = "{" "," "}" - - = = - - = as defined above - - = "error(" ")" -``` diff --git a/versioned_docs/version-v1.1.0/formats/zst.md b/versioned_docs/version-v1.1.0/formats/zst.md deleted file mode 100644 index 06a987e93..000000000 --- a/versioned_docs/version-v1.1.0/formats/zst.md +++ /dev/null @@ -1,481 +0,0 @@ ---- -sidebar_position: 3 -sidebar_label: ZST ---- - -# ZST Specification - -ZST, pronounced "zest", is a file format for columnar data based on -[the Zed data model](zed.md). -ZST is the "stacked" version of Zed, where the fields from a stream of -Zed records are stacked into vectors that form columns. -Its purpose is to provide for efficient analytics and search over -bounded-length sequences of [ZNG](zng.md) data that is stored in columnar form. - -Like [Parquet](https://github.com/apache/parquet-format), -ZST provides an efficient columnar representation for semi-structured data, -but unlike Parquet, ZST is not based on schemas and does not require -a schema to be declared when writing data to a file. Instead, -ZST exploits the super-structured nature of Zed data: columns of data -self-organize around their type structure. - -## ZST Files - -A ZST file encodes a bounded, ordered sequence of Zed values. -To provide for efficient access to subsets of ZST-encoded data (e.g., columns), -the ZST file is presumed to be accessible via random access -(e.g., range requests to a cloud object store or seeks in a Unix file system) -and ZST is therefore not intended as a streaming or communication format. - -A ZST file can be stored entirely as one storage object -or split across separate objects that are treated -together as a single ZST entity. While the ZST format provides much flexibility -for how data is laid out, it is left to an implementation to lay out data -in intelligent ways for efficient sequential read accesses of related data. - -## Column Streams - -The ZST data abstraction is built around a collection of _column streams_. - -There is one column stream for each top-level type encountered in the input where -each column stream is encoded according to its type. For top-level complex types, -the embedded elements are encoded recursively in additional column streams -as described below. For example, -a record column encodes a "presence" vector encoding any null value for -each field then encodes each non-null field recursively, whereas -an array column encodes a "lengths" vector and encodes each -element recursively. - -Values are reconstructed one by one from the column streams by picking values -from each appropriate column stream based on the type structure of the value and -its relationship to the various column streams. For hierarchical records -(i.e., records inside of records, or records inside of arrays inside of records, etc), -the reconstruction process is recursive (as described below). - -## The Physical Layout - -The overall layout of a ZST file is comprised of the following sections, -in this order: -* the data section, -* the reassembly section, and -* the trailer. - -This layout allows an implementation to buffer metadata in -memory while writing column data in a natural order to the -data section (based on the volume statistics of each column), -then write the metadata into the reassembly section along with the trailer -at the end. This allows a ZNG stream to be converted to a ZST file -in a single pass. - -> That said, the layout is -> flexible enough that an implementation may optimize the data layout with -> additional passes or by writing the output to multiple files then -> merging them together (or even leaving the ZST entity as separate files). - -### The Data Section - -The data section contains raw data values organized into _segments_, -where a segment is a seek offset and byte length relative to the -data section. Each segment contains a sequence of -[primitive-type Zed values](zed.md#1-primitive-types), -encoded as counted-length byte sequences where the counted-length is -variable-length encoded as in the [ZNG specification](zng.md). - -There is no information in the data section for how segments relate -to one another or how they are reconstructed into columns. They are just -blobs of ZNG data. - -> Unlike Parquet, there is no explicit arrangement of the column chunks into -> row groups but rather they are allowed to grow at different rates so a -> high-volume column might be comprised of many segments while a low-volume -> column must just be one or several. This allows scans of low-volume record types -> (the "mice") to perform well amongst high-volume record types (the "elephants"), -> i.e., there are not a bunch of seeks with tiny reads of mice data interspersed -> throughout the elephants. -> -> TBD: The mice/elephants model creates an interesting and challenging layout -> problem. If you let the row indexes get too far apart (call this "skew"), then -> you have to buffer very large amounts of data to keep the column data aligned. -> This is the point of row groups in Parquet, but the model here is to leave it -> up to the implementation to do layout as it sees fit. You can also fall back -> to doing lots of seeks and that might work perfectly fine when using SSDs but -> this also creates interesting optimization problems when sequential reads work -> a lot better. There could be a scan optimizer that lays out how the data is -> read that lives under the column stream reader. Also, you can make tradeoffs: -> if you use lots of buffering on ingest, you can write the mice in front of the -> elephants so the read path requires less buffering to align columns. Or you can -> do two passes where you store segments in separate files then merge them at close -> according to an optimization plan. - -Segments are subdivided into frames where frames are compressed -independently of each other, similar to ZNG compression framing. - -> TBD: use the -> [same compression format](zng.md#2-the-zng-format) -> exactly? -> -> The intent here is that segments are sized so that sequential read access -> performs well (e.g., 5MB) while frames are comparatively smaller (say 32KB) -> so that they can be decompressed and processed in a multi-threaded fashion where -> search and analytics can be performed on the decompressed buffer by the same -> thread that decompressed the frame enhancing read-locality and L1/L2 cache -> performance. - -### The Reassembly Section - -The reassembly section provides the information needed to reconstruct -column streams from segments, and in turn, to reconstruct the original Zed values -from column streams, i.e., to map columns back to composite values. - -> Of course, the reassembly section also provides the ability to extract just subsets of columns -> to be read and searched efficiently without ever needing to reconstruct -> the original rows. How well this performs is up to any particular -> ZST implementation. -> -> Also, the reassembly section is in general vastly smaller than the data section -> so the goal here isn't to express information in cute and obscure compact forms -> but rather to represent data in an easy-to-digest, programmer-friendly form that -> leverages ZNG. - -The reassembly section is a ZNG stream. Unlike Parquet, -which uses an externally described schema -(via [Thrift](https://thrift.apache.org/)) to describe -analogous data structures, we simply reuse ZNG here. - -#### The Super Types - -This reassembly stream encodes 2*N+1 Zed values, where N is equal to the number -of top-level Zed types that are present in the encoded input. -To simplify terminology, we call a top-level Zed type a "super type", -e.g., there are N unique super types encoded in the ZST file. - -These N super types are defined by the first N values of the reassembly stream -and are encoded as a null value of the indicated super type. -A super type's integer position in this sequence defines its identifier -encoded in the super column (defined below). This identifier is called -the super ID. - -> Change the first N values to type values instead of nulls? - -The next N+1 records contain reassembly information for each of the N super types -where each record defines the column streams needed to reconstruct the original -Zed values. - -#### Segment Maps - -The foundation of column reconstruction is based on _segment maps_. -A segment map is a list of the segments from the data area that are -concatenated to form the data for a column stream. - -Each segment map that appears within the reassembly records is represented -with a Zed array of records that represent seek ranges conforming to this -type signature: -``` -[{offset:uint64,length:uint32}] -``` -In the rest of this document, we will refer to this type as `` for -shorthand and refer to the concept as a "segmap". - -> We use the type name "segmap" to emphasize that this information represents -> a set of byte ranges where data is stored and must be read from *rather than* -> the data itself. - -#### The Super Column - -The first of the N+1 reassembly records defines the "super column", where this column -represents the sequence of super types of each original Zed value, i.e., indicating -which super type's column stream to select from to pull column values to form -the reconstructed value. -The sequence of super types is defined by each type's super ID (as defined above), -0 to N-1, within the set of N super types. - -The super column stream is encoded as a sequence of ZNG-encoded `int32` primitive values. -While there are a large number entries in the super column (one for each original row), -the cardinality of super IDs is small in practice so this column -will compress very significantly, e.g., in the special case that all the -values in the ZST file have the same super ID, -the super column will compress trivially. - -The reassembly map appears as the next value in the reassembly section -and is of type ``. - -#### The Reassembly Records - -Following the root reassembly map are N reassembly maps, one for each unique super type. - -Each reassembly record is a record of type ``, as defined below, -where each reassembly record appears in the same sequence as the original N schemas. -Note that there is no "any" type in Zed, but rather this terminology is used -here to refer to any of the concrete type structures that would appear -in a given ZST file. - -In other words, the reassembly record of the super column -combined with the N reassembly records collectively define the original sequence -of Zed data values in the original order. -Taken in pieces, the reassembly records allow efficient access to sub-ranges of the -rows, to subsets of columns of the rows, to sub-ranges of columns of the rows, and so forth. - -This simple top-down arrangement, along with the definition of the other -column structures below, is all that is needed to reconstruct all of the -original data. - -> Note that each row reassembly record has its own layout of columnar -> values and there is no attempt made to store like-typed columns from different -> schemas in the same physical column. - -The notation `` refers to any instance of the five column types: -* ``, -* ``, -* ``, -* ``, or -* ``. - -Note that when decoding a column, all type information is known -from the super type in question so there is no need -to encode the type information again in the reassembly record. - -#### Record Column - -A `` is defined recursively in terms of the column types of -its fields, i.e., other types that represent arrays, unions, or primitive types -and has the form: -``` -{ - :{column:,presence:}, - :{column:,presence:}, - ... - :{column:,presence:} -} -``` -where -* `` through `` are the names of the top-level fields of the -original row record, -* the `column` fields are column stream definitions for each field, and -* the `presence` columns are `int32` ZNG column streams comprised of a -run-length encoding of the locations of column values in their respective rows, -when there are null values (as described below). - -If there are no null values, then the `presence` field contains an empty ``. -If all of the values are null, then the `column` field is null (and the `presence` -contains an empty ``). For an empty ``, there is no -corresponding data stored in the data section. Since a `` is a Zed -array, an empty `` is simply the empty array value `[]`. - -#### Array Column - -An `` has the form: -``` -{values:,lengths:} -``` -where -* `values` represents a continuous sequence of values of the array elements -that are sliced into array values based on the length information, and -* `lengths` encodes a Zed `int32` sequence of values that represent the length - of each array value. - -The `` structure is used for both Zed arrays and sets. - -#### Map Column - -A `` has the form: -``` -{key:,value:} -``` -where -* `key` encodes the column of map keys and -* `value` encodes the column of map values. - -#### Union Column - -A `` has the form: -``` -{columns:[],tags:} -``` -where -* `columns` is an array containing the reassembly information for each tagged union value -in the same column order implied by the union type, and -* `tags` is a column of `int32` values where each subsequent value encodes -the tag of the union type indicating which column the value falls within. - -> TBD: change code to conform to columns array instead of record{c0,c1,...} - -The number of times each value of `tags` appears must equal the number of values -in each respective column. - -#### Primitive Column - -A `` is a `` that defines a column stream of -primitive values. - -#### Presence Columns - -The presence column is logically a sequence of booleans, one for each position -in the original column, indicating whether a value is null or present. -The number of values in the encoded column is equal to the number of values -present so that null values are not encoded. - -Instead the presence column is encoded as a sequence of alternating runs. -First, the number of values present is encoded, then the number of values not present, -then the number of values present, and so forth. These runs are then stored -as Zed `int32` values in the presence column (which may be subject to further -compression based on segment framing). - -### The Trailer - -After the reassembly section is a ZNG stream with a single record defining -the "trailer" of the ZST file. The trailer provides a magic field -indicating the "zst" format, a version number, -the size of the segment threshold for decomposing segments into frames, -the size of the skew threshold for flushing all segments to storage when -the memory footprint roughly exceeds this threshold, -and an array of sizes in bytes of the sections of the ZST file. - -This type of this record has the format -``` -{magic:string,type:string,version:int64,sections:[int64],meta:{skew_thresh:int64,segment_thresh:int64} -``` -The trailer can be efficiently found by scanning backward from the end of the -ZST file to find a valid ZNG stream containing a single record value -conforming to the above type. - -## Decoding - -To decode an entire ZST file into rows, the trailer is read to find the sizes -of the sections, then the ZNG stream of the reassembly section is read, -typically in its entirety. - -Since this data structure is relatively small compared to all of the columnar -data in the ZST file, -it will typically fit comfortably in memory and it can be very fast to scan the -entire reassembly structure for any purpose. - -> For example, for a given query, a "scan planner" could traverse all the -> reassembly records to figure out which segments will be needed, then construct -> an intelligent plan for reading the needed segments and attempt to read them -> in mostly sequential order, which could serve as -> an optimizing intermediary between any underlying storage API and the -> ZST decoding logic. - -To decode the "next" row, its schema index is read from the root reassembly -column stream. - -This schema index then determines which reassembly record to fetch -column values from. - -The top-level reassembly fetches column values as a ``. - -For any ``, a value from each field is read from each field's column, -accounting for the presence column indicating null, -and the results are encoded into the corresponding ZNG record value using -ZNG type information from the corresponding schema. - -For a `` a value is determined by reading the next -value from its segmap. - -For an ``, a length is read from its `lengths` segmap as an `int32` -and that many values are read from its the `values` sub-column, -encoding the result as a ZNG array value. - -For a ``, a value is read from its `selector` segmap -and that value is used to select the corresponding column stream -`c0`, `c1`, etc. The value read is then encoded as a ZNG union value -using the same selector value within the union value. - -## Examples - -### Hello, world - -Start with this ZNG data (shown as human-readable [ZSON](zson.md)): -``` -{a:"hello",b:"world"} -{a:"goodnight",b:"gracie"} -``` - -To convert to ZST format: -``` -zq -f zst hello.zson > hello.zst -``` - -Segments in the ZST format would be laid out like this: -``` -=== column for a -hello -goodnight -=== column for b -world -gracie -=== column for schema IDs -0 -0 -=== -``` -To see the detailed ZST structure described as ZSON, you can use the `zst` -command like this: -``` -zed dev dig section -Z 1 hello.zst -``` -which provides the Zed output (comments added with explanations): -``` -// First, all of the types of the encoded value sequence are declared -// with null values (just one here). - -null ({a:string,b:string}) - -// Then comes the root reassembly map. - -[ - { - offset: 29, - length: 2 (int32) - } -] - -// Finally comes the column assembly records. -// (Again, only one schema in this example, so only one such record.) - -{ - a: { - column: [ - { - offset: 0, - length: 16 (int32) - } - ], - presence: [] ([{offset:int64,length:int32}]) - }, - b: { - column: [ - { - offset: 16, - length: 13 (int32) - } - ], - presence: [] ([{offset:int64,length:int32}]) - } -} - -``` -The ZST trailer can be viewed with this command: -``` -zed dev dig trailer -Z hello.zst -``` -giving -``` -{ - magic: "ZNG Trailer", - type: "zst", - version: 2, - sections: [ - 31, - 95 - ], - meta: { - skew_thresh: 26214400, - segment_thresh: 5242880 - } (=zst.FileMeta) -} (=zngio.Trailer) -``` - -> Note finally, if there were 10MB of ZNG row data here, the reassembly section -> would be basically the same size, with perhaps a few segmaps. This emphasizes -> just how small this data structure is compared to the data section. diff --git a/versioned_docs/version-v1.1.0/install.md b/versioned_docs/version-v1.1.0/install.md deleted file mode 100644 index 1e8569f4a..000000000 --- a/versioned_docs/version-v1.1.0/install.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -sidebar_position: 2 -sidebar_label: Installation ---- - -# Installation - -Several options for installing `zq` and/or `zed` are available: -* [HomeBrew](#homebrew) for Mac or Linux, -* [Binary Download](#binary-download), or -* [Build from Source](#building-from-source). - -To install the Zed Python client, see the -[Python library documentation](libraries/python.md). - -## Homebrew - -On macOS and Linux, you can use [Homebrew](https://brew.sh/) to install `zq`: - -```bash -brew install brimdata/tap/zq -``` - -Similarly, to install `zed` for working with Zed lakes: -```bash -brew install brimdata/tap/zed -``` - -Once installed, run a [quick test](#quick-tests). - -## Binary Download - -We offer pre-built binaries for macOS, Windows and Linux for both x86 and arm -architectures in the Zed [Github Release page](https://github.com/brimdata/zed/releases). - -Each archive includes the build for `zq` and `zed`. - -Once installed, run a [quick test](#quick-tests). - -## Building from source - -If you have Go installed, you can easily build `zed` from source: - -```bash -go install github.com/brimdata/zed/cmd/{zed,zq}@latest -``` - -This installs the `zed` and `zq` binaries in your `$GOPATH/bin`. - -> If you don't have Go installed, download and install it from the -> [Go install page](https://golang.org/doc/install). Go 1.18 or later is -> required. - -Once installed, run a [quick test](#quick-tests). - -## Quick Tests - -`zq` and `zed` are easy to test as they are completely self-contained -command-line tools and require no external dependendies to run. - -### Test zq - -To test `zq`, simply run this command in your shell: -```mdtest-command -echo '"hello, world"' | zq -z - -``` -which should produce -```mdtest-output -"hello, world" -``` - -### Test zed - -To test `zed`, we'll make a lake in `./scratch`, load data, and query it -as follows: -``` -export ZED_LAKE=./scratch -zed init -zed create Demo -echo '{s:"hello, world"}' | zed load -use Demo - -zed query "from Demo" -``` -which should display -``` -{s:"hello, world"} -``` -Alternatively, you can run a Zed lake service, load it with data using `zed load`, -and hit the API. - -In one shell, run the server: -``` -zed init -lake scratch -zed serve -lake scratch -``` -And in another shell, run the client: -``` -zed create Demo -zed use Demo -echo '{s:"hello, world"}' | zed load - -zed query "from Demo" -``` -which should also display -``` -{s:"hello, world"} -``` diff --git a/versioned_docs/version-v1.1.0/integrations/_category_.yaml b/versioned_docs/version-v1.1.0/integrations/_category_.yaml deleted file mode 100644 index 034b94791..000000000 --- a/versioned_docs/version-v1.1.0/integrations/_category_.yaml +++ /dev/null @@ -1,2 +0,0 @@ -position: 9 -label: Integrations diff --git a/versioned_docs/version-v1.1.0/integrations/amazon-s3.md b/versioned_docs/version-v1.1.0/integrations/amazon-s3.md deleted file mode 100644 index d47e87086..000000000 --- a/versioned_docs/version-v1.1.0/integrations/amazon-s3.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -sidebar_position: 1 -sidebar_label: Amazon S3 ---- - -# Amazon S3 - -Zed tools can access [Amazon S3](https://aws.amazon.com/s3/) and -S3-compatible storage via `s3://` URIs. Details are described below. - -## Region - -You must specify an AWS region via one of the following: -* The `AWS_REGION` environment variable -* The `~/.aws/config` file -* The file specified by the `AWS_CONFIG_FILE` environment variable - -You can create `~/.aws/config` by installing the -[AWS CLI](https://aws.amazon.com/cli/) and running `aws configure`. - -:::tip Note -If using S3-compatible storage that does not recognize the concept of regions, -a region must still be specified, e.g., by providing a dummy value for -`AWS_REGION`. -::: - -## Credentials - -You must specify AWS credentials via one of the following: -* The `AWS_ACCESS_KEY_ID` and`AWS_SECRET_ACCESS_KEY` environment variables -* The `~/.aws/credentials` file -* The file specified by the `AWS_SHARED_CREDENTIALS_FILE` environment variable - -You can create `~/.aws/credentials` by installing the -[AWS CLI](https://aws.amazon.com/cli/) and running `aws configure`. - -## Endpoint - -To use S3-compatible storage not provided by AWS, set the `AWS_S3_ENDPOINT` -environment variable to the hostname or URI of the provider. - -## Wildcard Support - -[Like the AWS CLI tools themselves](https://aws.amazon.com/premiumsupport/knowledge-center/s3-event-notification-filter-wildcard), -Zed does not currently expand UNIX-style `*` wildcards in S3 URIs. If you -find this limitation is impacting your workflow, please add your use case -details as a comment in issue [zed/1994](https://github.com/brimdata/zed/issues/1994) -to help us track the priority of possible enhancements in this area. diff --git a/versioned_docs/version-v1.1.0/lake/_category_.yaml b/versioned_docs/version-v1.1.0/lake/_category_.yaml deleted file mode 100644 index 5beb193f7..000000000 --- a/versioned_docs/version-v1.1.0/lake/_category_.yaml +++ /dev/null @@ -1,2 +0,0 @@ -position: 7 -label: Lake diff --git a/versioned_docs/version-v1.1.0/lake/api.md b/versioned_docs/version-v1.1.0/lake/api.md deleted file mode 100644 index 03c27bb5f..000000000 --- a/versioned_docs/version-v1.1.0/lake/api.md +++ /dev/null @@ -1,488 +0,0 @@ ---- -sidebar_position: 1 -sidebar_label: API ---- - -# Zed lake API - -## _Status_ - -> This is a brief sketch of the functionality exposed in the -> Zed API. More detailed documentation of the API will be forthcoming. - -## Endpoints - -### Pools - -#### Create pool - -Create a new lake pool. - -``` -POST /pool -``` - -**Params** - -| Name | Type | In | Description | -| ---- | ---- | -- | ----------- | -| name | string | body | **Required.** Name of the pool. Must be unique to lake. | -| layout.order | string | body | Order of storage by primary key(s) in pool. Possible values: desc, asc. Default: asc. | -| layout.keys | [[string]] | body | Primary key(s) of pool. The element of each inner string array should reflect the hierarchical ordering of named fields within indexed records. Default: [[ts]]. | -| thresh | int | body | The size in bytes of each seek index. | - -**Example Request** - -``` -curl -X POST \ - -H 'Accept: application/json' \ - -H 'Content-Type: application/json' \ - -d '{"name": "inventory", "layout": {"keys": [["product","serial_number"],["warehouse"]]}}' \ - http://localhost:9867/pool -``` - -**Example Response** - -``` -{ - "pool": { - "ts": "2022-04-01T18:18:50.54718Z", - "name": "inventory", - "id": "0x0ed4f40a9ab28531c25ebc860fac69fe52fe6eb7", - "layout": { - "order": "asc", - "keys": [ - [ - "product", - "serial_number" - ], - [ - "warehouse" - ] - ] - }, - "seek_stride": 65536, - "threshold": 524288000 - }, - "branch": { - "ts": "2022-04-01T18:18:50.547752Z", - "name": "main", - "commit": "0x0000000000000000000000000000000000000000" - } -} -``` - ---- - -#### Rename pool - -Change a pool's name. - -``` -PUT /pool/{pool} -``` - -**Params** - -| Name | Type | In | Description | -| ---- | ---- | -- | ----------- | -| pool | string | path | **Required.** ID or name of the requested pool. | -| name | string | body | **Required.** The desired new name of the pool. Must be unique to lake. | - -**Example Request** - -``` -curl -X PUT \ - -H 'Accept: application/json' \ - -H 'Content-Type: application/json' \ - -d '{"name": "catalog"}' \ - http://localhost:9867/pool/inventory -``` - -On success, HTTP 204 is returned with no response payload. - ---- - -#### Delete pool - -Permanently delete a pool. - -``` -DELETE /pool/{pool} -``` - -**Params** - -| Name | Type | In | Description | -| ---- | ---- | -- | ----------- | -| pool | string | path | **Required.** ID or name of the requested pool. | - -**Example Request** - -``` -curl -X DELETE \ - http://localhost:9867/pool/inventory -``` - -On success, HTTP 204 is returned with no response payload. - ---- - -### Branches - -#### Load Data - -Add data to a pool and return a reference commit ID. - -``` -POST /pool/{pool}/branch/{branch} -``` - -**Params** - -| Name | Type | In | Description | -| ---- | ---- | -- | ----------- | -| pool | string | path | **Required.** ID or name of the pool. | -| branch | string | path | **Required.** Name of branch to which data will be loaded. | -| | various | body | **Required.** Contents of the posted data. | -| Content-Type | string | header | MIME type of the posted content. If undefined, the service will attempt to introspect the data and determine type automatically. | - -**Example Request** - -``` -curl -X POST \ - -H 'Accept: application/json' \ - -H 'Content-Type: application/json' \ - -d '{"product": {"serial_number": 12345, "name": "widget"}, "warehouse": "chicago"} - {"product": {"serial_number": 12345, "name": "widget"}, "warehouse": "miami"} - {"product": {"serial_number": 12346, "name": "gadget"}, "warehouse": "chicago"}' \ - http://localhost:9867/pool/inventory/branch/main -``` - -**Example Response** - -``` -{"commit":"0x0ed4f42da5763a9500ee71bc3fa5c69f306872de","warnings":[]} -``` - ---- - -#### Get Branch - -Get information about a branch. - -``` -GET /pool/{pool}/branch/{branch} -``` - -**Params** - -| Name | Type | In | Description | -| ---- | ---- | -- | ----------- | -| pool | string | path | **Required.** ID or name of the pool. | -| branch | string | path | **Required.** Name of branch. | - -**Example Request** - -``` -curl -X GET \ - -H 'Accept: application/json' \ - http://localhost:9867/pool/inventory/branch/main -``` - -**Example Response** - -``` -{"commit":"0x0ed4fa21616ecd8fec9d6fd395ad876db98a5dae","warnings":null} -``` - ---- - -#### Delete Branch - -Delete a branch. - -``` -DELETE /pool/{pool}/branch/{branch} -``` - -**Params** - -| Name | Type | In | Description | -| ---- | ---- | -- | ----------- | -| pool | string | path | **Required.** ID or name of the pool. | -| branch | string | path | **Required.** Name of branch. | - -**Example Request** - -``` -curl -X DELETE \ - http://localhost:9867/pool/inventory/branch/staging -``` - -On success, HTTP 204 is returned with no response payload. - ---- - -#### Delete Data - -Take a list of commit IDs or object IDs in a branch and create a deletion -commit of all referenced objects. - -``` -POST /pool/{pool}/branch/{branch}/delete -``` - -**Params** - -| Name | Type | In | Description | -| ---- | ---- | -- | ----------- | -| pool | string | path | **Required.** ID of the pool. | -| branch | string | path | **Required.** Name of branch. | -| object_ids | [string] | body | Commit IDs or object IDs to be deleted. | - -**Example Request** - -``` -curl -X POST \ - -H 'Accept: application/json' \ - -H 'Content-Type: application/json' \ - -d '{"object_ids": ["274Eb1Kn8MTM6qxPyBpVTvYhLLa", "274EavbXt546VNelRLNXrzWShNh"]}' \ - http://localhost:9867/pool/inventory/branch/main/delete - -``` - -**Example Response** - -``` -{"commit":"0x0ed4fee861e8fb61568783205a46a218182eba6c","warnings":null} -``` - ---- - -#### Merge Branches - -Create a commit with the difference of the child branch added to the selected -branch. - -``` -POST /pool/{pool}/branch/{branch}/merge/{child} -``` - -**Params** - -| Name | Type | In | Description | -| ---- | ---- | -- | ----------- | -| pool | string | path | **Required.** ID of the pool. | -| branch | string | path | **Required.** Name of branch selected as merge destination. | -| child | string | path | **Required.** Name of child branch selected as source of merge. | - -**Example Request** - -``` -curl -X POST \ - -H 'Accept: application/json' \ - http://localhost:9867/pool/inventory/branch/main/merge/staging -``` - -**Example Response** - -``` -{"commit":"0x0ed4ffc2566b423ee444c1c8e6bf964515290f4c","warnings":null} -``` - ---- - -#### Revert - -Create a revert commit of the specified commit. - -``` -POST /pool/{pool}/branch/{branch}/revert/{commit} -``` - -**Params** - -| Name | Type | In | Description | -| ---- | ---- | -- | ----------- | -| pool | string | path | **Required.** ID of the pool. | -| branch | string | path | **Required.** Name of branch on which to revert commit. | -| commit | string | path | **Required.** ID of commit to be reverted. | - -**Example Request** - -``` -curl -X POST \ - -H 'Accept: application/json' \ - http://localhost:9867/pool/inventory/branch/main/revert/27D22ifDw3Ms2NMzo8jXpDfpgjc -``` - -**Example Response** - -``` -{"commit":"0x0ed500ab6f80e5ac8a1b871bddd88c57fe963ab1","warnings":null} -``` - ---- - -#### Index Objects - -Create an index of object(s) for the specified rule. - -``` -POST /pool/{pool}/branch/{branch}/index -``` - -**Params** - -| Name | Type | In | Description | -| ---- | ---- | -- | ----------- | -| pool | string | path | **Required.** ID of the pool. | -| branch | string | path | **Required.** Name of branch. | -| rule_name | string | body | **Required.** Name of indexing rule. | -| tags | [string] | body | IDs of data objects to index. | - -**Example Request** - -``` -curl -X POST \ - -H 'Accept: application/json' \ - -H 'Content-Type: application/json' \ - -d '{"rule_name": "MyRuleGroup", "tags": ["27DAbmqxukfABARaAHauARBJOXH", "27DAbeUBW7llN2mXAadYz00Zjpk"]}' \ - http://localhost:9867/pool/inventory/branch/main/index - -``` - -**Example Response** - -``` -{"commit":"0x0ed510f4648da9742e8e9c35e3439d5b708843e1","warnings":null} -``` - ---- - -#### Update Index - -Apply all rules or a range of index rules for all objects that are not indexed -in a branch. - -``` -POST /pool/{pool}/branch/{branch}/index/update -``` - -**Params** - -| Name | Type | In | Description | -| ---- | ---- | -- | ----------- | -| pool | string | path | **Required.** ID of the pool. | -| branch | string | path | **Required.** Name of branch. | -| rule_names | [string] | body | Name(s) of index rule(s) to apply. If undefined, all rules will be applied. | - -**Example Request** - -``` -curl -X POST \ - -H 'Accept: application/json' \ - -H 'Content-Type: application/json' \ - -d '{"rule_names": ["MyRuleGroup", "AnotherRuleGroup"]}' \ - http://localhost:9867/pool/inventory/branch/main/index/update -``` - -**Example Response** - -``` -{"commit":"0x0ed51322b7d69bd0bddad10e31e3211408e34a88","warnings":null} -``` - -### Query - -Execute a Zed query against data in a data lake. - -``` -POST /query -``` - -**Params** - -| Name | Type | In | Description | -| ---- | ---- | -- | ----------- | -| query | string | body | Zed query to execute. All data is returned if not specified. || -| head.pool | string | body | Pool to query against Not required if pool is specified in query. | -| head.branch | string | body | Branch to query against. Defaults to "main". | - -**Example Request** - -``` -curl -X POST \ - -H 'Accept: application/x-zson' \ - -H 'Content-Type: application/json' \ - http://localhost:9867/query -d '{"query":"from inventory@main | count() by warehouse"}' -``` - -**Example Response** - -``` -{warehouse:"chicago",count:2(uint64)} -{warehouse:"miami",count:1(uint64)} -``` - ---- - -### Events - -Subscribe to an events feed, which returns an event stream in the format of -[server-sent events](https://html.spec.whatwg.org/multipage/server-sent-events.html). - -``` -GET /events -``` - -**Params** - -None - -**Example Request** - -``` -curl -X GET \ - -H 'Accept: application/json' \ - http://localhost:9867/events -``` - -**Example Response** - -``` -event: pool-new -data: {"pool_id": "1sMDXpVwqxm36Rc2vfrmgizc3jz"} - -event: pool-update -data: {"pool_id": "1sMDXpVwqxm36Rc2vfrmgizc3jz"} - -event: pool-commit -data: {"pool_id": "1sMDXpVwqxm36Rc2vfrmgizc3jz", "commit_id": "1tisISpHoWI7MAZdFBiMERXeA2X"} - -event: pool-delete -data: {"pool_id": "1sMDXpVwqxm36Rc2vfrmgizc3jz"} -``` - ---- - -## Media Types - -For response content types, the service can produce a variety of formats. To -receive responses in the desired format, include the MIME type of the format in -the request's Accept HTTP header. - -If the Accept header is not specified, the service will return ZSON as the -default response format for the endpoints described above. - -The supported MIME types are as follows: - -| Format | MIME Type | -| ------ | --------- | -| CSV | text/csv | -| JSON | application/json | -| NDJSON | application/x-ndjson | -| ZJSON | application/x-zjson | -| ZSON | application/x-zson | -| ZNG | application/x-zng | diff --git a/versioned_docs/version-v1.1.0/lake/format.md b/versioned_docs/version-v1.1.0/lake/format.md deleted file mode 100644 index 91a1b4846..000000000 --- a/versioned_docs/version-v1.1.0/lake/format.md +++ /dev/null @@ -1,300 +0,0 @@ ---- -sidebar_position: 2 -sidebar_label: Format ---- - -# Zed Lake Format - -## _Status_ - ->This document is a rough draft and work in progress. We plan to -soon bring it up to date with the current implementation and maintain it -as we add new capabilities to the system. - -## Introduction - -To support the client-facing [Zed lake semantics](../commands/zed.md#1-the-lake-model) -implemented by the [`zed` command](../commands/zed.md), we are developing -an open specification for the Zed lake storage format described in this document. -As we make progress on the Zed lake model, we will update this document -as we go. - -The Zed Lake storage format is somewhat analagous the emerging -cloud table formats like [Iceberg](https://iceberg.apache.org/spec/), -but differs but differs in a fundamental way: there are no tables in a Zed Lake. - -On the contrary, we believe a better approach for organizing modern, eclectic -data is based on a type system rather than a collection of tables -and relational schemas. Since relations, tables, schemas, data frames, -Parquet files, Avro files, JSON, CSV, XML, and so forth are all subsets of the -Zed's super-structured type system, a data lake based on Zed holds the promise -to provide a universal data representation for all of these different approaches to data. - -Also, while we are not currently focused on building a SQL engine for the Zed lake, -it is most certainly possible to do so, as a Zed record type -[is analagous to](../formats/README.md#2-zed-a-super-structured-pattern) -a SQL table definition. SQL tables can essentially be dynamically projected -via a table virtualization layer built on top of the Zed lake model. - -All data and metadata in a Zed lake conforms to the Zed data model, which materially -simplifies development, test, introspection, and so forth. For example, -search indexes are just ZNG files with an embedded B-Tree structure. -There is no need to create a special index file format and all the related -tooling and support functions to manipulate a custom format. - -## Cloud Object Model - -Every data element in a Zed lake is either of two fundamental object types: -* a single-writer _immutable object_, or -* a multi-writer _transaction journal_. - -### Immutable Objects - -All imported data in a data pool is composed of immutable objects, which are organized -around a primary data object. Each data object is composed of one or more immutable objects -all of which share a common, globally unique identifier, -which is referred to below generically as `` below. - -These identifiers are [KSUIDs](https://github.com/segmentio/ksuid). -The KSUID allocation scheme -provides a decentralized solution for creating globally unique IDs. -KSUIDs have embedded timestamps so the creation time of -any object named in this way can be derived. Also, a simple lexicographic -sort of the KSUIDs results in a creation-time ordering (though this ordering -is not relied on for causal relationships since clock skew can violate -such an assumption). - -> While a Zed lake is defined in terms of a cloud object store, it may also -> be realized on top of a file system, which provides a convenient means for -> local, small-scale deployments for test/debug workflows. Thus, for simple use cases, -> the complexity of running an object-store service may be avoided. - -#### Data Objects - -A data object is created by a single writer using a globally unique name -with an embedded KSUID. -New objects are written in their entirety. No updates, appends, or modifications -may be made once an object exists. Given these semantics, any such object may be -trivially cached as neither its name nor content ever change. - -Since the object's name is globally unique and the -resulting object is immutable, there is no possible write concurrency to manage -with respect to a given object. - -A data object is composed of -* the primary data object stored as one or two objects (for row and/or column layout), -* an optional seek index, and -* zero or more search indexes. - -Data objects may be either in sequential form (i.e., ZNG) or column form (i.e., ZST), -or both forms may be present as a query optimizer may choose to use whatever -representation is more efficient. -When both row and column data objects are present, they must contain the same -underlying Zed data. - -Immutable objects are named as follows: - -|object type|name| -|-----------|----| -|column data|`/data/.zst`| -|row data|`/data/.zng`| -|row seek index|`/data/-seek.zng`| -|search index|`/index/-.zng`| - -`` is the KSUID of the data object. -`` is the KSUID of an index object created according to the -index rules described above. Every index object is defined -with respect to a data object. - -The seek index maps pool key values to seek offsets in the ZNG file thereby -allowing a scan to do a byte-range retrieval of the ZNG object when -processing only a subset of data. - -> Note the ZST format will have seekable checkpoints based on the sort key that -> are encoded into its metadata section so there is no need to have a separate -> seek index for the columnar object. - -#### Commit History - -A branch's commit history is the definitive record of the evolution of data in -that pool in a transactionally consistent fashion. - -Each commit object entry is identified with its `commit ID`. -Objects are immutable and uniquely named so there is never a concurrent write -condition. - -The "add" and "commit" operations are transactionally stored -in a chain of commit objects. Any number of adds (and deletes) may appear -in a commit object. All of the operations that belong to a commit are -identified with a commit identifier (ID). - -As each commit object points to its parent (except for the initial commit -in main), the collection of commit objects in a pool forms a tree. - -Each commit object contains a sequence of _actions_: - -* `Add` to add a data object reference to a pool, -* `Delete` to delete a data object reference from a pool, -* `AddIndex` to bind an index object to a data object to prune the data object -from a scan when possible using the index, -* `DeleteIndex` to remove an index object reference to its data object, and -* `Commit` for providing metadata about each commit. - -The actions are not grouped directly by their commit ID but instead each -action serialization includes its commit ID. - -The chain of commit objects starting at any commit and following -the parent pointers to the original commit is called the "commit log". -This log represents the definitive record of a branch's present -and historical content, and accessing its complete detail can provide -insights about data layout, provenance, history, and so forth. - -### Transaction Journal - -State that is mutable is built upon a transaction journal of immutable -collections of entries. In this way, there are no objects in the -storage footprint that are ever modified. Instead, the journal captures -changes and journal snapshots are used to provide synchronization points -for efficient access to the journal (so the entire journal need not be -read to create the current state) and old journal entries may be removed -based on retention policy. - -The journal may be updated concurrently by multiple writers so concurrency -controls are included (see [Journal Concurrency Control](#journal-concurrency-control) -below) to provide atomic updates. - -A journal entry simply contains actions that modify the visible "state" of -the pool by changing branch name to commit object mappings. Note that -adding a commit object to a pool changes nothing until a branch pointer -is mutated to point at that object. - -Each atomic journal commit object is a ZNG file numbered 1 to the end of journal (HEAD), -e.g., `1.zng`, `2.zng`, etc., each number corresponding to a journal ID. -The 0 value is reserved as the null journal ID. -The journal's TAIL begins at 1 and is increased as journal entries are purged. -Entries are added at the HEAD and removed from the TAIL. -Once created, a journal entry is never modified but it may be deleted and -never again allocated. -There may be 1 or more entries in each commit object. - -Each journal entry implies a snapshot of the data in a pool. A snapshot -is computed by applying the transactions in sequence from entry TAIL to -the journal entry in question, up to HEAD. This gives the set of commit IDs -that comprise a snapshot. - -The set of branch pointers in a pool is assembled at any point in the journal's history -by scanning a journal that includes ADD, UPDATE, and DELETE actions for the -mapping of a branch name to a commit object. A timestamp is recorded in -each action to provide for time travel. - -For efficiency, a journal entry's snapshot may be stored as a "cached snapshot" -alongside the journal entry. This way, the snapshot at HEAD may be -efficiently computed by locating the most recent cached snapshot and scanning -forward to HEAD. - -#### Journal Concurrency Control - -To provide for atomic commits, a writer must be able to atomically update -the HEAD of the log. There are three strategies for doing so. - -First, if the cloud service offers "put-if-missing" semantics, then a writer -can simply read the HEAD file and use put-if-missing to write to the -journal at position HEAD+1. If this fails because of a race, then the writer -can simply write at position HEAD+2 and so forth until it succeeds (and -then update the HEAD object). Note that there can be a race in updating -HEAD, but HEAD is always less than or equal to the real end of journal, -and this condition can be self-corrected by probing for HEAD+1 whenever -the HEAD of the journal is accessed. - -> Note that put-if-missing can be emulated on a local file system by opening -> a file for exclusive access and checking that it has zero length after -> a successful open. - -Second, strong read/write ordering semantics (as exists in Amazon S3) -can be used to implement transactional journal updates as follows: -* _TBD: this is worked out but needs to be written up_ - -Finally, since the above algorithm requires many round trips to the storage -system and such round trips can be tens of milliseconds, another approach -is to simply run a lock service as part of a cloud deployment that manages -a mutex lock for each pool's journal. - -#### Configuration State - -Configuration state describing a lake or pool is also stored in mutable objects. -Zed lakes simply use a commit journal to store configuration like the -list of pools and pool attributes, indexing rules used across pools, -etc. Here, a generic interface to a commit journal manages any configuration -state simply as a key-value store of snapshots providing time travel over -the configuration history. - -### Merge on Read - -To support _sorted scans_, -data objects are store in a sorted order defined by the pool's sort key. -The sort key may be a composite key compised of primary, secondary, etc -component keys. - -When the key range of objects overlap, they may be read in parallel -in merged in sorted order. -This is called the _merge scan_. - -If many overlapping data objects arise, performing a merge scan -on every read can be inefficient. -This can arise when -many random data `load` operations involving perhaps "late" data -(e.g., the pool key is a timestamp and records with old timestamp values regularly -show up and need to be inserted into the past). The data layout can become -fragmented and less efficient to scan, requiring a scan to merge data -from a potentially large number of different objects. - -To solve this problem, the Zed lake format follows the -[LSM](https://en.wikipedia.org/wiki/Log-structured_merge-tree) design pattern. -Since records in each data object are stored in sorted order, a total order over -a collection of objects (e.g., the collection coming from a specific set of commits) -can be produced by executing a sorted scan and rewriting the results back to the pool -in a new commit. In addition, the objects comprising the total order -do not overlap. This is just the basic LSM algorithm at work. - -### Object Naming - -``` -/ - lake.zng - pools/ - HEAD - TAIL - 1.zng - 2.zng - ... - index_rules/ - HEAD - TAIL - 1.zng - 2.zng - ... - ... - / - branches/ - HEAD - TAIL - 1.zng - 2.zng - ... - commits/ - .zng - .zng - ... - data/ - .{zng,zst} - .{zng,zst} - ... - index/ - -.zng - -.zng - ... - -.zng - ... - / - ... -``` diff --git a/versioned_docs/version-v1.1.0/language/README.md b/versioned_docs/version-v1.1.0/language/README.md deleted file mode 100644 index 68d28a422..000000000 --- a/versioned_docs/version-v1.1.0/language/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# The Zed Language - -The language documents: -* provide an [overview](overview.md) of the Zed language, -* layout some [conventions](conventions.md) for the documenation, and -* enumerate the [operators](operators/README.md), [functions](functions/README.md), -and [aggregate functions](aggregates/README.md) in reference format. diff --git a/versioned_docs/version-v1.1.0/language/_category_.yaml b/versioned_docs/version-v1.1.0/language/_category_.yaml deleted file mode 100644 index 8ef8329b7..000000000 --- a/versioned_docs/version-v1.1.0/language/_category_.yaml +++ /dev/null @@ -1,2 +0,0 @@ -position: 5 -label: Language diff --git a/versioned_docs/version-v1.1.0/language/aggregates/README.md b/versioned_docs/version-v1.1.0/language/aggregates/README.md deleted file mode 100644 index 26fbc7fab..000000000 --- a/versioned_docs/version-v1.1.0/language/aggregates/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Aggregate Functions - ---- - -Aggregate functions appear in either summarization -or expression context and produce an aggregate value for a sequence of inputs values. - -- [and](and.md) - logical AND of input values -- [any](any.md) - select an arbitrary value from its input -- [avg](avg.md) - average value -- [collect](collect.md) - aggregate values into array -- [count](count.md) - count input values -- [dcount](dcount.md) - count distinct input values -- [fuse](fuse.md) - compute a fused type of input values -- [max](max.md) - maximum value of input values -- [min](min.md) - minimum value of input values -- [or](or.md) - logical OR of input values -- [sum](sum.md) - sum of input values -- [union](union.md) - set union of input values diff --git a/versioned_docs/version-v1.1.0/language/aggregates/_category_.yaml b/versioned_docs/version-v1.1.0/language/aggregates/_category_.yaml deleted file mode 100644 index a3f81b784..000000000 --- a/versioned_docs/version-v1.1.0/language/aggregates/_category_.yaml +++ /dev/null @@ -1,2 +0,0 @@ -position: 5 -label: Aggregate Functions diff --git a/versioned_docs/version-v1.1.0/language/aggregates/and.md b/versioned_docs/version-v1.1.0/language/aggregates/and.md deleted file mode 100644 index 7ead179c9..000000000 --- a/versioned_docs/version-v1.1.0/language/aggregates/and.md +++ /dev/null @@ -1,45 +0,0 @@ -### Aggregate Function - -  **and** — logical AND of input values - -### Synopsis -``` -and(bool) -> bool -``` -### Description - -The _and_ aggregate function computes the logical AND over all of its input. - -### Examples - -Anded value of simple sequence: -```mdtest-command -echo 'true false true' | zq -z 'and(this)' - -``` -=> -```mdtest-output -{and:false} -``` - -Continuous AND of simple sequence: -```mdtest-command -echo 'true false true' | zq -z 'yield and(this)' - -``` -=> -```mdtest-output -true -false -false -``` -Unrecognized types are ignored and not coerced for truthiness: -```mdtest-command -echo 'true "foo" 0 false true' | zq -z 'yield and(this)' - -``` -=> -```mdtest-output -true -true -true -false -false -``` diff --git a/versioned_docs/version-v1.1.0/language/aggregates/any.md b/versioned_docs/version-v1.1.0/language/aggregates/any.md deleted file mode 100644 index 4966c5cca..000000000 --- a/versioned_docs/version-v1.1.0/language/aggregates/any.md +++ /dev/null @@ -1,43 +0,0 @@ -### Aggregate Function - -  **any** — select an arbitrary input value - -### Synopsis -``` -any(any) -> any -``` -### Description - -The _any_ aggregate function returns an arbitrary element from its input. -The semantics of how the item is selected is not defined. - -### Examples - -Any picks the first one in this scenario but this behavior is undefined: -```mdtest-command -echo '1 2 3 4' | zq -z 'any(this)' - -``` -=> -```mdtest-output -{any:1} -``` - -Continuous any over a simple sequence: -```mdtest-command -echo '1 2 3 4' | zq -z 'yield any(this)' - -``` -=> -```mdtest-output -1 -1 -1 -1 -``` -Any is not sensitive to mixed types as it just picks one: -```mdtest-command -echo '"foo" 1 2 3 ' | zq -z 'any(this)' - -``` -=> -```mdtest-output -{any:"foo"} -``` diff --git a/versioned_docs/version-v1.1.0/language/aggregates/avg.md b/versioned_docs/version-v1.1.0/language/aggregates/avg.md deleted file mode 100644 index af944e127..000000000 --- a/versioned_docs/version-v1.1.0/language/aggregates/avg.md +++ /dev/null @@ -1,42 +0,0 @@ -### Aggregate Function - -  **avg** — average value - -### Synopsis -``` -avg(number) -> number -``` -### Description - -The _avg_ aggregate function computes the mathematical average value of its input. - -### Examples - -Average value of simple sequence: -```mdtest-command -echo '1 2 3 4' | zq -z 'avg(this)' - -``` -=> -```mdtest-output -{avg:2.5} -``` - -Continuous average of simple sequence: -```mdtest-command -echo '1 2 3 4' | zq -z 'yield avg(this)' - -``` -=> -```mdtest-output -1. -1.5 -2. -2.5 -``` -Unrecognized types are ignored: -```mdtest-command -echo '1 2 3 4 "foo"' | zq -z 'avg(this)' - -``` -=> -```mdtest-output -{avg:2.5} -``` diff --git a/versioned_docs/version-v1.1.0/language/aggregates/collect.md b/versioned_docs/version-v1.1.0/language/aggregates/collect.md deleted file mode 100644 index b5d3c2cf8..000000000 --- a/versioned_docs/version-v1.1.0/language/aggregates/collect.md +++ /dev/null @@ -1,44 +0,0 @@ -### Aggregate Function - -  **collect** — aggregate values into array - -### Synopsis -``` -collect(any) -> [any] -``` -### Description - -The _collect_ aggregate function organizes its input into an array. -If the input values vary in type, the return type will be an array -of union of the types encountered. - -### Examples - -Simple sequence collected into an array: -```mdtest-command -echo '1 2 3 4' | zq -z 'collect(this)' - -``` -=> -```mdtest-output -{collect:[1,2,3,4]} -``` - -Continuous collection over a simple sequence: -```mdtest-command -echo '1 2 3 4' | zq -z 'yield collect(this)' - -``` -=> -```mdtest-output -[1] -[1,2] -[1,2,3] -[1,2,3,4] -``` -Mixed types create a union type for the array elements: -```mdtest-command -echo '1 2 3 4 "foo"' | zq -z 'collect(this)' - -``` -=> -```mdtest-output -{collect:[1,2,3,4,"foo"]} -``` diff --git a/versioned_docs/version-v1.1.0/language/aggregates/count.md b/versioned_docs/version-v1.1.0/language/aggregates/count.md deleted file mode 100644 index 4d42de17d..000000000 --- a/versioned_docs/version-v1.1.0/language/aggregates/count.md +++ /dev/null @@ -1,43 +0,0 @@ -### Aggregate Function - -  **count** — count input values - -### Synopsis -``` -count() -> uint64 -``` -### Description - -The _count_ aggregate function computes the number of values in its input. - -### Examples - -Anded value of simple sequence: -```mdtest-command -echo '1 2 3' | zq -z 'count()' - -``` -=> -```mdtest-output -{count:3(uint64)} -``` - -Continuous count of simple sequence: -```mdtest-command -echo '1 2 3' | zq -z 'yield count()' - -``` -=> -```mdtest-output -1(uint64) -2(uint64) -3(uint64) -``` -Mixed types are handled: -```mdtest-command -echo '1 "foo" 10.0.0.1' | zq -z 'yield count()' - -``` -=> -```mdtest-output -1(uint64) -2(uint64) -3(uint64) -``` diff --git a/versioned_docs/version-v1.1.0/language/aggregates/dcount.md b/versioned_docs/version-v1.1.0/language/aggregates/dcount.md deleted file mode 100644 index 13aa1af5d..000000000 --- a/versioned_docs/version-v1.1.0/language/aggregates/dcount.md +++ /dev/null @@ -1,45 +0,0 @@ -### Aggregate Function - -  **dcount** — count distinct input values - -### Synopsis -``` -dcount() -> uint64 -``` -### Description - -The _dcount_ aggregation function uses hyperloglog to estimate distinct values -of the input in a memory efficient manner. - -### Examples - -Anded value of simple sequence: -```mdtest-command -echo '1 2 2 3' | zq -z 'dcount(this)' - -``` -=> -```mdtest-output -{dcount:3(uint64)} -``` - -Continuous count of simple sequence: -```mdtest-command -echo '1 2 2 3' | zq -z 'yield dcount(this)' - -``` -=> -```mdtest-output -1(uint64) -2(uint64) -2(uint64) -3(uint64) -``` -Mixed types are handled: -```mdtest-command -echo '1 "foo" 10.0.0.1' | zq -z 'yield dcount(this)' - -``` -=> -```mdtest-output -1(uint64) -2(uint64) -3(uint64) -``` diff --git a/versioned_docs/version-v1.1.0/language/aggregates/fuse.md b/versioned_docs/version-v1.1.0/language/aggregates/fuse.md deleted file mode 100644 index e0a781bf6..000000000 --- a/versioned_docs/version-v1.1.0/language/aggregates/fuse.md +++ /dev/null @@ -1,36 +0,0 @@ -### Aggregate Function - -  **fuse** — compute a fused type of input values - -### Synopsis -``` -fuse(any) -> type -``` -### Description - -The _fuse_ aggregate function applies [type fusion](../overview.md#10-type-fusion) -to its input and returns the fused type. - -This aggregation is useful with group-by for data exploration and discovery -when searching for shaping rules to cluster a large number of varied input -types to a smaller number of fused types each from a set of interrelated types. - -### Examples - -Fuse two records: -```mdtest-command -echo '{a:1,b:2}{a:2,b:"foo"}' | zq -z 'fuse(this)' - -``` -=> -```mdtest-output -{fuse:<{a:int64,b:(int64,string)}>} -``` -Fuse records with a group-by key: -```mdtest-command -echo '{a:1,b:"bar"}{a:2.1,b:"foo"}{a:3,b:"bar"}' | zq -z 'fuse(this) by b | sort' - -``` -=> -```mdtest-output -{b:"bar",fuse:<{a:int64,b:string}>} -{b:"foo",fuse:<{a:float64,b:string}>} -``` diff --git a/versioned_docs/version-v1.1.0/language/aggregates/max.md b/versioned_docs/version-v1.1.0/language/aggregates/max.md deleted file mode 100644 index a7a81d13f..000000000 --- a/versioned_docs/version-v1.1.0/language/aggregates/max.md +++ /dev/null @@ -1,42 +0,0 @@ -### Aggregate Function - -  **max** — maximum value of input values - -### Synopsis -``` -max(number) -> number -``` -### Description - -The _max_ aggregate function computes the maximum value of its input. - -### Examples - -Maximum value of simple sequence: -```mdtest-command -echo '1 2 3 4' | zq -z 'max(this)' - -``` -=> -```mdtest-output -{max:4} -``` - -Continuous maximum of simple sequence: -```mdtest-command -echo '1 2 3 4' | zq -z 'yield max(this)' - -``` -=> -```mdtest-output -1 -2 -3 -4 -``` -Unrecognized types are ignored: -```mdtest-command -echo '1 2 3 4 "foo"' | zq -z 'max(this)' - -``` -=> -```mdtest-output -{max:4} -``` diff --git a/versioned_docs/version-v1.1.0/language/aggregates/min.md b/versioned_docs/version-v1.1.0/language/aggregates/min.md deleted file mode 100644 index 1f8a1bee8..000000000 --- a/versioned_docs/version-v1.1.0/language/aggregates/min.md +++ /dev/null @@ -1,42 +0,0 @@ -### Aggregate Function - -  **min** — minimum value of input values - -### Synopsis -``` -min(...number) -> number -``` -### Description - -The _min_ aggregate function computes the minimum value of its input. - -### Examples - -Minimum value of simple sequence: -```mdtest-command -echo '1 2 3 4' | zq -z 'min(this)' - -``` -=> -```mdtest-output -{min:1} -``` - -Continuous minimum of simple sequence: -```mdtest-command -echo '1 2 3 4' | zq -z 'yield min(this)' - -``` -=> -```mdtest-output -1 -1 -1 -1 -``` -Unrecognized types are ignored: -```mdtest-command -echo '1 2 3 4 "foo"' | zq -z 'min(this)' - -``` -=> -```mdtest-output -{min:1} -``` diff --git a/versioned_docs/version-v1.1.0/language/aggregates/or.md b/versioned_docs/version-v1.1.0/language/aggregates/or.md deleted file mode 100644 index 33bcafad6..000000000 --- a/versioned_docs/version-v1.1.0/language/aggregates/or.md +++ /dev/null @@ -1,45 +0,0 @@ -### Aggregate Function - -  **or** — logical OR of input values - -### Synopsis -``` -or(bool) -> bool -``` -### Description - -The _or_ aggregate function computes the logical OR over all of its input. - -### Examples - -Ored value of simple sequence: -```mdtest-command -echo 'false true false' | zq -z 'or(this)' - -``` -=> -```mdtest-output -{or:true} -``` - -Continuous OR of simple sequence: -```mdtest-command -echo 'false true false' | zq -z 'yield or(this)' - -``` -=> -```mdtest-output -false -true -true -``` -Unrecognized types are ignored and not coerced for truthiness: -```mdtest-command -echo 'false "foo" 1 true false' | zq -z 'yield or(this)' - -``` -=> -```mdtest-output -false -false -false -true -true -``` diff --git a/versioned_docs/version-v1.1.0/language/aggregates/sum.md b/versioned_docs/version-v1.1.0/language/aggregates/sum.md deleted file mode 100644 index 086dbcf5a..000000000 --- a/versioned_docs/version-v1.1.0/language/aggregates/sum.md +++ /dev/null @@ -1,42 +0,0 @@ -### Aggregate Function - -  **sum** — sum of input values - -### Synopsis -``` -sum(number) -> number -``` -### Description - -The _sum_ aggregate function computes the mathematical sum of its input. - -### Examples - -Sume of simple sequence: -```mdtest-command -echo '1 2 3 4' | zq -z 'sum(this)' - -``` -=> -```mdtest-output -{sum:10} -``` - -Continuous sum of simple sequence: -```mdtest-command -echo '1 2 3 4' | zq -z 'yield sum(this)' - -``` -=> -```mdtest-output -1 -3 -6 -10 -``` -Unrecognized types are ignored: -```mdtest-command -echo '1 2 3 4 "foo"' | zq -z 'sum(this)' - -``` -=> -```mdtest-output -{sum:10} -``` diff --git a/versioned_docs/version-v1.1.0/language/aggregates/union.md b/versioned_docs/version-v1.1.0/language/aggregates/union.md deleted file mode 100644 index fc89730f9..000000000 --- a/versioned_docs/version-v1.1.0/language/aggregates/union.md +++ /dev/null @@ -1,46 +0,0 @@ -### Aggregate Function - -  **union** — set union of input values - -### Synopsis -``` -union(any) -> |[any]| -``` -### Description - -The _union_ aggregate function computes a set union of its input values. -If the values are of uniform type, then the output is a set of that type. -If the values are of mixed typs, the the output is a set of union of the -types encountered. - -### Examples - -Average value of simple sequence: -```mdtest-command -echo '1 2 3 3' | zq -z 'union(this)' - -``` -=> -```mdtest-output -{union:|[1,2,3]|} -``` - -Continuous average of simple sequence: -```mdtest-command -echo '1 2 3 3' | zq -z 'yield union(this)' - -``` -=> -```mdtest-output -|[1]| -|[1,2]| -|[1,2,3]| -|[1,2,3]| -``` -Mixed types create a union type for the set elements: -```mdtest-command-issue-3610 -echo '1 2 3 "foo"' | zq -z 'set:=union(this) | yield this,typeof(set)' - -``` -=> -```mdtest-output-issue-3610 -{set:|[1,2,3,"foo"]|} -<|[(int64,string)]|> -``` diff --git a/versioned_docs/version-v1.1.0/language/conventions.md b/versioned_docs/version-v1.1.0/language/conventions.md deleted file mode 100644 index dd224417d..000000000 --- a/versioned_docs/version-v1.1.0/language/conventions.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -sidebar_position: 2 -sidebar_label: Conventions ---- - -# Type Conventions - -Arguments to function and input values to operators are all dynamically typed, -yet certain functions expect certain data types or classes of data types. -To this end, the function and operator prototypes include a number -of type classes as follows: -* _any_ - any Zed data type -* _float_ - any floating point Zed type -* _int_ - any signd or ungigned Zed integer type -* _number_ - either float or int - -Note that there is no "any" type in Zed as all super-structured data is -comprehensively typed; "any" here simply refers to a value that is allowed -to take on any Zed type. diff --git a/versioned_docs/version-v1.1.0/language/functions/README.md b/versioned_docs/version-v1.1.0/language/functions/README.md deleted file mode 100644 index 598db5644..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# Functions - ---- - -Functions appear in expression context and -take Zed values as arguments and produce a value as a result. - -* [abs](abs.md) - absolute value of a number -* [base64](base64.md) - encode/decode base64 strings -* [bucket](bucket.md) - quantize a time or duration value into buckets of equal widths -* [cast](cast.md) - coerce a value to a different type -* [ceil](ceil.md) - ceiling of a number -* [cidr_match](cidr_match.md) - test if IP is in a network -* [compare](compare.md) - return an int comparing two values -* [crop](crop.md) - remove fields from a value that are missing in a specified type -* [error](error.md) - wrap a value as an error -* [every](every.md) - bucket `ts` using a duration -* [fields](fields.md) - return the flattened path names of a record -* [fill](fill.md) - add null values for missing record fields -* [flatten](flatten.md) - transform a record into a flattened map -* [floor](floor.md) - floor of a number -* [grep](grep.md) - search strings inside of values -* [has](has.md) - test existence of values -* [has_error](has_error.md) - test if a value has an error -* [is](is.md) - test a value's type -* [is_error](is_error.md) - test if a value is an error -* [join](join.md) - concatenate array of strings with a separator -* [kind](kind.md) - return a value's type category -* [ksuid](ksuid.md) - encode/decode KSUID-style unique identifiers -* [len](len.md) - the type-dependent length of a value -* [log](log.md) - natural logarithm -* [lower](lower.md) - convert a string to lower case -* [missing](missing.md) - test for the "missing" error -* [nameof](nameof.md) - the name of a named type -* [network_of](network_of.md) - the network of an IP -* [now](now.md) - the current time -* [order](order.md) - reorder record fields -* [parse_uri](parse_uri.md) - parse a string URI into a structured record -* [parse_zson](parse_zson.md) - parse ZSON text into a Zed value -* [pow](pow.md) - exponential function of any base -* [quiet](quiet.md) - quiet "missing" errors -* [replace](replace.md) - replace one string for another -* [round](round.md) - round a number -* [rune_len](rune_len.md) - length of a string in Unicode code points -* [shape](shape.md) - apply cast, fill, and order -* [split](split.md) - slice a string into an array of strings -* [sqrt](sqrt.md) - square root of a number -* [trim](trim.md) - strip leading and trailing whitespace -* [typename](typename.md) - look up and return a named type -* [typeof](typeof.md) - the type of a value -* [typeunder](typeunder.md) - the underlying type of a value -* [under](under.md) - the underlying value -* [unflatten](unflatten.md) - transform a record with dotted names to a nested record -* [upper](upper.md) - convert a string to upper case diff --git a/versioned_docs/version-v1.1.0/language/functions/_category_.yaml b/versioned_docs/version-v1.1.0/language/functions/_category_.yaml deleted file mode 100644 index e39130cdc..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/_category_.yaml +++ /dev/null @@ -1,2 +0,0 @@ -position: 4 -label: Functions diff --git a/versioned_docs/version-v1.1.0/language/functions/abs.md b/versioned_docs/version-v1.1.0/language/functions/abs.md deleted file mode 100644 index 0a7eddbe2..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/abs.md +++ /dev/null @@ -1,30 +0,0 @@ -### Function - -  **abs** — absolute value of a number - -### Synopsis - -``` -abs(n: number) -> number -``` -### Description - -The _abs_ function returns the absolute value of its argument `n`, which -must be a numeric type. - -### Examples - -Absolute value of a various numbers: -```mdtest-command -echo '1 -1 0 -1.0 -1(int8) 1(uint8) "foo"' | zq -z 'yield abs(this)' - -``` -=> -```mdtest-output -1 -1 -0 -1. -1 -1(uint8) -error("abs: not a number: \"foo\"") -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/base64.md b/versioned_docs/version-v1.1.0/language/functions/base64.md deleted file mode 100644 index 7d81aa955..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/base64.md +++ /dev/null @@ -1,50 +0,0 @@ -### Function - -  **base64** — encode/decode Base64 strings - -### Synopsis - -``` -base64(b: bytes) -> string -base64(s: string) -> bytes -``` -### Description - -The _base64_ function encodes a Zed bytes value `b` as a -a [Base64](https://en.wikipedia.org/wiki/Base64) string, -or decodes a Base64 string `s` into a Zed bytes value. - -### Examples - -Encode byte sequence `0x010203` into its Base64 string: -```mdtest-command -echo '0x010203' | zq -z 'yield base64(this)' - -``` -=> -```mdtest-output -"AQID" -``` -Decode "AQID" into byte sequence `0x010203`: -```mdtest-command -echo '"AQID"' | zq -z 'yield base64(this)' - -``` -=> -```mdtest-output -0x010203 -``` -Encode ASCII string into Base64-encoded string: -```mdtest-command -echo '"hello, world"' | zq -z 'yield base64(bytes(this))' - -``` -=> -```mdtest-output -"aGVsbG8sIHdvcmxk" -``` -Decode a Base64 string and cast the decoded bytes to a string: -```mdtest-command -echo '"aGVsbG8gd29ybGQ="' | zq -z 'yield string(base64(this))' - -``` -=> -```mdtest-output -"hello world" -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/bucket.md b/versioned_docs/version-v1.1.0/language/functions/bucket.md deleted file mode 100644 index 295bf4c38..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/bucket.md +++ /dev/null @@ -1,29 +0,0 @@ -### Function - -  **bucket** — quantize a time or duration value into buckets of equal time spans - -### Synopsis - -``` -bucket(val: time, span: duration|number) -> time -bucket(val: duration, span: duration|number) -> duration -``` - -### Description - -The _bucket_ function quantizes a time or duration `val` -(or value that can be coerced to time) into buckets that -are equally spaced as specified by `span` where the bucket boundary -aligns with 0. - -### Examples - -Bucket a couple times to hour intervals: -```mdtest-command -echo '2020-05-26T15:27:47Z "5/26/2020 3:27pm"' | zq -z 'yield bucket(time(this), 1h)' - -``` -=> -```mdtest-output -2020-05-26T15:00:00Z -2020-05-26T15:00:00Z -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/cast.md b/versioned_docs/version-v1.1.0/language/functions/cast.md deleted file mode 100644 index 1fa98b8ef..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/cast.md +++ /dev/null @@ -1,87 +0,0 @@ -### Function - -  **cast** — coerce a value to a different type - -### Synopsis - -``` -cast(val: any, t: type) -> any -cast(val: any, name: string) -> any -``` - -### Description - -The _cast_ function performs type casts but handles both primitive types and -complex types. If the input type `t` is a primitive type, then the result -is equivalent to -``` -t(val) -``` -e.g., the result of `cast(1, )` is the same as `string(1)` which is `"1"`. -In the second form, where the `name` argument is a string, cast creates -a new named type where the name for the type is given by `name` and its -type is given by `typeof(val)`. This provides a convenient mechanism -to create new named types from the input data itself without having to -hard code the type in the Zed source text. - -For complex types, the cast function visits each leaf value in `val` and -casts that value to the corresponding type in `t`. -When a complex value has multiple levels of nesting, -casting is applied recursively down the tree. For example, cast is recursively -applied to each element in array of records and recursively applied to each record. - -If `val` is a record (or if any of its nested value is a record): -* absent fields are ignored and omitted from the result, -* extra input fields are passed through unmodified to the result, and -* fields are matched by name and are order independent and the _input_ order is retained. - -In other words, `cast` does not rearrange the order of fields in the input -to match the output type's order but rather just modifies the leaf values. - -If a cast fails, an error is returned when casting to primitive types -and the input value is returned when casting to complex types. - -### Examples - -_Cast primitives to type `ip`_ -```mdtest-command -echo '"10.0.0.1" 1 "foo"' | zq -z 'cast(this, )' - -``` -produces -```mdtest-output -10.0.0.1 -error("cannot cast 1 to type ip") -error("cannot cast \"foo\" to type ip") -``` - -_Cast a record to a different record type_ -```mdtest-command -echo '{a:1,b:2}{a:3}{b:4}' | zq -z 'cast(this, <{b:string}>)' - -``` -produces -```mdtest-output -{a:1,b:"2"} -{a:3} -{b:"4"} -``` - -_Create a name a typed and cast value to the new type_ -```mdtest-command -echo '{a:1,b:2}{a:3,b:4}' | zq -z 'cast(this, "foo")' - -``` -produces -```mdtest-output -{a:1,b:2}(=foo) -{a:3,b:4}(=foo) -``` - -_Name data based its properties_ -```mdtest-command -echo '{x:1,y:2}{r:3}{x:4,y:5}' | zq -z 'switch ( case has(x) => cast(this, "point") default => cast(this, "radius") ) | sort this' - -``` -produces -```mdtest-output -{x:1,y:2}(=point) -{x:4,y:5}(=point) -{r:3}(=radius) -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/ceil.md b/versioned_docs/version-v1.1.0/language/functions/ceil.md deleted file mode 100644 index 827e628f5..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/ceil.md +++ /dev/null @@ -1,27 +0,0 @@ -### Function - -  **ceil** — ceiling of a number - -### Synopsis - -``` -ceil(n: number) -> number -``` -### Description - -The _ceil_ function returns the smallest integer greater than or equal to its argument `n`, -which must be a numeric type. The return type retains the type of the argument. - -### Examples - -The ceiling of a various numbers: -```mdtest-command -echo '1.5 -1.5 1(uint8) 1.5(float32)' | zq -z 'yield ceil(this)' - -``` -=> -```mdtest-output -2. --1. -1(uint8) -2.(float32) -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/cidr_match.md b/versioned_docs/version-v1.1.0/language/functions/cidr_match.md deleted file mode 100644 index 2cd459ae4..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/cidr_match.md +++ /dev/null @@ -1,47 +0,0 @@ -### Function - -  **cidr_match** — test if IP is in a network - -### Synopsis - -``` -cidr_match(mask: net, val: any) -> bool -``` -### Description - -The _cidr_match_ function returns true if `val` contains an IP address that -falls within the network given by `mask`. When `val` is a complex type, the -function traverses its nested structured to find any network values. -If `mask` is not type `net`, then an error is returned. - -### Examples - -Test whether values are IP addresses in a network: -```mdtest-command -echo '10.1.2.129 11.1.2.129 10 "foo"' | zq -z 'yield cidr_match(10.0.0.0/8, this)' - -``` -=> -```mdtest-output -true -false -false -false -``` -It also works for IPs in nested values: -echo '[10.1.2.129,11.1.2.129] {a:10.0.0.1} {a:11.0.0.1}' | zq -z 'yield cidr_match(10.0.0.0/8, this)' - -``` -=> -```mdtest-output -true -true -false -``` - -The first argument must be a network: -``` -echo '10.0.0.1' | zq -z 'yield cidr_match([1,2,3], this)' - -``` -=> -``` -error("cidr_match: not a net: [1,2,3]") -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/compare.md b/versioned_docs/version-v1.1.0/language/functions/compare.md deleted file mode 100644 index 5cd1a14b8..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/compare.md +++ /dev/null @@ -1,26 +0,0 @@ -### Function - -  **compare** — return an integer comparing two values - -### Synopsis - -``` -compare(a: any, b: any) -> int64 -``` - -### Description - -The _compare_ function returns an integer comparing two values. The result will -be 0 if a is equal to b, +1 if a is greater than b, and -1 if a is less than b. -_compare_ differs from `<`, `>`, `<=`, `>=`, `==`, and `!=` in that it will -work for any type (e.g., `compare(1, "1")`). `null` values compare greater than non-`null` values. - -### Examples - -```mdtest-command -echo '{a: 2, b: "1"}' | zq -z 'yield compare(a, b)' - -``` -=> -```mdtest-output --1 -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/crop.md b/versioned_docs/version-v1.1.0/language/functions/crop.md deleted file mode 100644 index d13f3a343..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/crop.md +++ /dev/null @@ -1,54 +0,0 @@ -### Function - -  **crop** — remove fields from input value that are missing in a specified type - -### Synopsis - -``` -crop(val: any, t: type) -> any -``` - -### Description - -The _crop_ function operates on record values (or records within a nested value) -and returns a result such that any fields that are present in `val` but not in -record type `t` are removed. -Cropping is a useful when you want records to "fit" a schema tightly. - -If `val` is a record (or if any of its nested values is a record): -* absent fields are ignored and omitted from the result, -* fields are matched by name and are order independent and the _input_ order is retained, and -* leaf types are ignored, i.e., no casting occurs. - -If `val` is not a record, it is returned unmodified. - -### Examples - -_Crop a record_ -```mdtest-command -echo '{a:1,b:2}' | zq -z 'crop(this, <{a:int64}>)' - -``` -produces -```mdtest-output -{a:1} -``` - -_Crop an array of records_ -```mdtest-command -echo '[{a:1,b:2},{a:3,b:4}]' | zq -z 'crop(this, <[{a:int64}]>)' - -``` -produces -```mdtest-output -[{a:1},{a:3}] -``` - -_Cropped primitives are returned unmodified_ -```mdtest-command -echo '10.0.0.1 1 "foo"' | zq -z 'crop(this, <{a:int64}>)' - -``` -produces -```mdtest-output -10.0.0.1 -1 -"foo" -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/error.md b/versioned_docs/version-v1.1.0/language/functions/error.md deleted file mode 100644 index 59f6b7d39..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/error.md +++ /dev/null @@ -1,65 +0,0 @@ -### Function - -  **error** — wrap a Zed value as an error - -### Synopsis - -``` -error(val: any) -> error -``` -### Description - -The _error_ function returns an error version of a Zed value. -It wraps any Zed value `val` to turn it into an error type providing -a means to create structured and stacked errors. - -### Examples - -Wrap a record as a structured error: -```mdtest-command -echo '{foo:"foo"}' | zq -z 'yield error({message:"bad value", value:this})' - -``` -=> -```mdtest-output -error({message:"bad value",value:{foo:"foo"}}) -``` - -Wrap any value as an error: -```mdtest-command -echo '1 "foo" [1,2,3]' | zq -z 'yield error(this)' - -``` -=> -```mdtest-output -error(1) -error("foo") -error([1,2,3]) -``` - -Test if a value is an error and show its type "kind": -```mdtest-command -echo 'error("exception") "exception"' | zq -Z 'yield {this,err:is_error(this),kind:kind(this)}' - -``` -=> -```mdtest-output -{ - this: error("exception"), - err: true, - kind: "error" -} -{ - this: "exception", - err: false, - kind: "primitive" -} -``` - -Comparison of a missing error results in a missing error even if they -are the same missing errors so as to not allow field comparisons of two -missing fields to succeed: -```mdtest-command -echo '{}' | zq -z 'badfield:=x | yield badfield==error("missing")' - -``` -=> -```mdtest-output -error("missing") -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/every.md b/versioned_docs/version-v1.1.0/language/functions/every.md deleted file mode 100644 index 23507ae63..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/every.md +++ /dev/null @@ -1,36 +0,0 @@ -### Function - -  **every** — bucket `ts` using a duration - -### Synopsis - -``` -every(d: duration) -> time -``` -### Description - -The _every_ function is a shortcut for `bucket(ts, d)`. -This provides a convenient binning function for aggregations -when analyzing time-series data like logs that have a `ts` field. - -### Examples - -Operate on a sequence of times: -```mdtest-command -echo '{ts:2021-02-01T12:00:01Z}' | zq -z 'yield {ts,val:0},{ts:ts+1s},{ts:ts+2h2s} | yield every(1h) | sort' - -``` --> -```mdtest-output -2021-02-01T12:00:00Z -2021-02-01T12:00:00Z -2021-02-01T14:00:00Z -``` -Use as a group-by key: -```mdtest-command -echo '{ts:2021-02-01T12:00:01Z}' | zq -z 'yield {ts,val:1},{ts:ts+1s,val:2},{ts:ts+2h2s,val:5} | sum(val) by every(1h) | sort' - -``` --> -```mdtest-output -{ts:2021-02-01T12:00:00Z,sum:3} -{ts:2021-02-01T14:00:00Z,sum:5} -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/fields.md b/versioned_docs/version-v1.1.0/language/functions/fields.md deleted file mode 100644 index bc737bc8a..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/fields.md +++ /dev/null @@ -1,47 +0,0 @@ -### Function - -  **fields** — return the flattened path names of a record - -### Synopsis - -``` -fields(r: record) -> [[string]] -``` -### Description - -The _fields_ function returns an array of string arrays of all the field names in record `r`. -A field's path name is representing by an array of strings since the dot -separator is an unreliable indicator of field boundaries as `.` itself -can appear in a field name. - -`error("missing")` is returned if `r` is not a record. - -### Examples - -Extract the fields of a nested record: -```mdtest-command -echo '{a:1,b:2,c:{d:3,e:4}}' | zq -z 'yield fields(this)' - -``` -=> -```mdtest-output -[["a"],["b"],["c","d"],["c","e"]] -``` -Easily convert to dotted names if you prefer: -```mdtest-command -echo '{a:1,b:2,c:{d:3,e:4}}' | zq -z 'over fields(this) | yield join(this,".")' - -``` -=> -```mdtest-output -"a" -"b" -"c.d" -"c.e" -``` -A record is expected: -```mdtest-command -echo 1 | zq -z 'yield {f:fields(this)}' - -``` -=> -```mdtest-output -{f:error("missing")} -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/fill.md b/versioned_docs/version-v1.1.0/language/functions/fill.md deleted file mode 100644 index e32923d7c..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/fill.md +++ /dev/null @@ -1,50 +0,0 @@ -### Function - -  **fill** — add null values for missing record fields - -### Synopsis - -``` -fill(val: any, t: type) -> any -``` - -### Description - -The _fill_ function adds to the input record `val` any fields that are -present in the output type `t` but not in the input. - -Filled fields are added with a `null` value. Filling is useful when -you want to be sure that all fields in a schema are present in a record. - -If `val` is not a record, it is returned unmodified. - -### Examples - -_Fill a record_ -```mdtest-command -echo '{a:1}' | zq -z 'fill(this, <{a:int64,b:string}>)' - -``` -produces -```mdtest-output -{a:1,b:null(string)} -``` - -_Fill an array of records_ -```mdtest-command -echo '[{a:1},{a:2}]' | zq -z 'fill(this, <[{a:int64,b:int64}]>)' - -``` -produces -```mdtest-output -[{a:1,b:null(int64)},{a:2,b:null(int64)}] -``` - -_Non-records are returned unmodified_ -```mdtest-command -echo '10.0.0.1 1 "foo"' | zq -z 'fill(this, <{a:int64,b:int64}>)' - -``` -produces -```mdtest-output -10.0.0.1 -1 -"foo" -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/flatten.md b/versioned_docs/version-v1.1.0/language/functions/flatten.md deleted file mode 100644 index 87c652007..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/flatten.md +++ /dev/null @@ -1,25 +0,0 @@ -### Function - -  **flatten** — transform a record into a flattened array. - -### Synopsis - -``` -flatten(val: record) -> [{key:[string],value:}] -``` -### Description -The _flatten_ function returns an array of records `[{key:[string],value:}]` -where `key` is a string array of the path of each record field of `val` and -`value` is the corresponding value of that field. -If there are multiple types for the leaf values in `val`, then the array value -inner type is a union of the record types present. - -### Examples - -```mdtest-command -echo '{a:1,b:{c:"foo"}}' | zq -z 'yield flatten(this)' - -``` -=> -```mdtest-output -[{key:["a"],value:1},{key:["b","c"],value:"foo"}] -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/floor.md b/versioned_docs/version-v1.1.0/language/functions/floor.md deleted file mode 100644 index 70614cbd0..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/floor.md +++ /dev/null @@ -1,27 +0,0 @@ -### Function - -  **floor** — floor of a number - -### Synopsis - -``` -floor(n: number) -> number -``` -### Description - -The _floor_ function returns the greatest integer less than or equal to its argument `n`, -which must be a numeric type. The return type retains the type of the argument. - -### Examples - -The floor of a various numbers: -```mdtest-command -echo '1.5 -1.5 1(uint8) 1.5(float32)' | zq -z 'yield floor(this)' - -``` -=> -```mdtest-output -1. --2. -1(uint8) -1.(float32) -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/grep.md b/versioned_docs/version-v1.1.0/language/functions/grep.md deleted file mode 100644 index 234bae67f..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/grep.md +++ /dev/null @@ -1,72 +0,0 @@ -### Function - -  **grep** — search strings inside of values - -### Synopsis - -``` -grep( [, e: any]) -> bool -``` -### Description - -The _grep_ function searches all of the strings in its input value `e` -(or `this` if `e` is not given) - using the `` argument, which must be a -[regular expression](../overview.md#711-regular-expressions), -[glob pattern](../overview.md#712-globs), or string literal. -If the pattern matches for any string, then the result is `true`. Otherwise, it is `false`. - -> Note that string matches are case insensitive while regular expression -> and glob matches are case sensitive. In a forthcoming release, case sensitivity -> will be a expressible for all three pattern types. - -The entire input value is traversed: -* for records, each field name is traversed and each field value is traversed or descended -if a complex type, -* for arrays and sets, each element is traversed or descended if a complex type, and -* for maps, each key and value is traversed or descended if a complex type. - -### Examples - -_Reach into nested records_ -```mdtest-command -echo '{foo:10}{bar:{s:"baz"}}' | zq -z 'grep("baz")' - -``` -=> -```mdtest-output -{bar:{s:"baz"}} -``` -_It only matches string fields_ -```mdtest-command -echo '{foo:10}{bar:{s:"baz"}}' | zq -z 'grep("10")' - -``` -=> -```mdtest-output -``` -_Match a field name_ -```mdtest-command -echo '{foo:10}{bar:{s:"baz"}}' | zq -z 'grep("foo")' - -``` -=> -```mdtest-output -{foo:10} -``` -_Regular expression_ -```mdtest-command -echo '{foo:10}{bar:{s:"baz"}}' | zq -z 'grep(/foo|baz/)' - -``` -=> -```mdtest-output -{foo:10} -{bar:{s:"baz"}} -``` -_Glob with a second argument_ - -```mdtest-command -echo '{s:"bar"}{s:"foo"}{s:"baz"}{t:"baz"}' | zq -z 'grep(b*, s)' - -``` -=> -```mdtest-output -{s:"bar"} -{s:"baz"} -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/has.md b/versioned_docs/version-v1.1.0/language/functions/has.md deleted file mode 100644 index f20827b82..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/has.md +++ /dev/null @@ -1,48 +0,0 @@ -### Function - -  **has** — test existence of values - -### Synopsis - -``` -has(val: any [, ... val: any]) -> bool -``` -### Description - -The _has_ function returns false if any of its arguments are `error("missing")` -and otherwise returns true. -`has(e)` is a shortcut for [`!missing(e)`](missing.md). - -This function is most often used to test the existence of certain fields in an -expected record, e.g., `has(a,b)` is true when `this` is a record and has -the fields `a` and `b`, provided their values are not `error("missing")`. - -It's also useful in shaping when applying conditional logic based on the -presence of certain fields: -``` -switch ( - case has(a) => ... - case has(b) => ... - default => ... -) -``` - -### Examples - -```mdtest-command -echo '{foo:10}' | zq -z 'yield {yes:has(foo),no:has(bar)}' - -echo '{foo:[1,2,3]}' | zq -z 'yield {yes: has(foo[0]),no:has(foo[3])}' - -echo '{foo:{bar:"value"}}' | zq -z 'yield {yes:has(foo.bar),no:has(foo.baz)}' - -echo '{foo:10}' | zq -z 'yield {yes:has(foo+1),no:has(bar+1)}' - -echo 1 | zq -z 'yield has(bar)' - -echo '{x:error("missing")}' | zq -z 'yield has(x)' - -``` -=> -```mdtest-output -{yes:true,no:false} -{yes:true,no:false} -{yes:true,no:false} -{yes:true,no:false} -false -false -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/has_error.md b/versioned_docs/version-v1.1.0/language/functions/has_error.md deleted file mode 100644 index c61836724..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/has_error.md +++ /dev/null @@ -1,26 +0,0 @@ -### Function - -  **has_error** — test if a value is or contains an error - -### Synopsis - -``` -has_error(val: any) -> bool -``` -### Description - -The _has_error_ function returns true if its argument is or contains an error. -_has_error_ is different from _is_error_ in that _has_error_ will recurse -into value's leaves to determine if there is an error in the value. - -### Examples - -```mdtest-command -echo '{a:{b:"foo"}}' | zq -z 'yield has_error(this)' - -echo '{a:{b:"foo"}}' | zq -z 'a.x := a.y + 1 | yield has_error(this)' - -``` -=> -```mdtest-output -false -true -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/hex.md b/versioned_docs/version-v1.1.0/language/functions/hex.md deleted file mode 100644 index a13373f1b..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/hex.md +++ /dev/null @@ -1,49 +0,0 @@ -### Function - -  **hex** — encode/decode hexadecimal strings - -### Synopsis - -``` -hex(b: bytes) -> string -hex(s: string) -> bytes -``` -### Description - -The _hex_ function encodes a Zed bytes value `b` as -a hexadecimal string or decodes a hexadecimal string `s` into a Zed bytes value. - -### Examples - -Encode a simple bytes sequence as a hexadecimal string: -```mdtest-command -echo '0x0102ff' | zq -z 'yield hex(this)' - -``` -=> -```mdtest-output -"0102ff" -``` -Decode a simple hex string: -```mdtest-command -echo '"0102ff"' | zq -z 'yield hex(this)' - -``` -=> -```mdtest-output -0x0102ff -``` -Encode the bytes of an ASCII string as a hexadecimal string: -```mdtest-command -echo '"hello, world"' | zq -z 'yield hex(bytes(this))' - -``` -=> -```mdtest-output -"68656c6c6f2c20776f726c64" -``` -Decode hex string representing ASCII into its string form: -```mdtest-command -echo '"68656c6c6f20776f726c64"' | zq -z 'yield string(hex(this))' - -``` -=> -```mdtest-output -"hello world" -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/is.md b/versioned_docs/version-v1.1.0/language/functions/is.md deleted file mode 100644 index 23bd6e71c..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/is.md +++ /dev/null @@ -1,53 +0,0 @@ -### Function - -  **is** — test a value's type - -### Synopsis -``` -is(t: type) -> bool -is(val: any, t: type) -> bool -``` -### Description - -The _is_ function returns true if the argument `val` is of type `t`. If `val` -is omitted, it defaults to `this`. The _is_ function is shorthand for `typeof(val)==t`. - -### Examples - -Test simple types: -```mdtest-command -echo '1.' | zq -z 'yield {yes:is(),no:is()}' - -``` -=> -```mdtest-output -{yes:true,no:false} -``` - -Test for a given input's record type or "shape": -```mdtest-command -echo '{s:"hello"}' | zq -z 'yield is(<{s:string}>)' - -``` -=> -```mdtest-output -true -``` -If you test a named type with it's underlying type, the types are different, -but if you use the type name or typeunder function, there is a match: -```mdtest-command -echo '{s:"hello"}(=foo)' | zq -z 'yield is(<{s:string}>)' - -echo '{s:"hello"}(=foo)' | zq -z 'yield is()' - -``` -=> -```mdtest-output -false -true -``` - -To test the underlying type, just use `==`: -```mdtest-command -echo '{s:"hello"}(=foo)' | zq -z 'yield typeunder(this)==<{s:string}>' - -``` -=> -```mdtest-output -true -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/is_error.md b/versioned_docs/version-v1.1.0/language/functions/is_error.md deleted file mode 100644 index 268f75626..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/is_error.md +++ /dev/null @@ -1,43 +0,0 @@ -### Function - -  **is_error** — test if a value is an error - -### Synopsis - -``` -is_error(val: any) -> bool -``` -### Description - -The _is_error_ function returns true if its argument's type is error. -`is_error(v)` is shortcut for `kind(v)=="error"`, - -### Examples - -A simple value is not an error: -```mdtest-command -echo 1 | zq -z 'yield is_error(this)' - -``` -=> -```mdtest-output -false -``` - -An error value is an error: -```mdtest-command -echo "error(1)" | zq -z 'yield is_error(this)' - -``` -=> -```mdtest-output -true -``` - -Convert an error string into a record with an indicator and a message: -```mdtest-command -echo '"not an error" error("an error")' | zq -z 'yield {err:is_error(this),message:under(this)}' - -``` -=> -```mdtest-output -{err:false,message:"not an error"} -{err:true,message:"an error"} -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/join.md b/versioned_docs/version-v1.1.0/language/functions/join.md deleted file mode 100644 index 0eaa5cd3c..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/join.md +++ /dev/null @@ -1,34 +0,0 @@ -### Function - -  **join** — concatenate array of strings with a separator - -### Synopsis - -``` -join(val: [string], sep: string) -> string -``` -### Description - -The _join_ function concatenates the elements of string array `val` to create a single -string. The string `sep` is placed between each value in the resulting string. - -#### Example: - -Join a symbol array of strings: -```mdtest-command -echo '["a","b","c"]' | zq -z 'yield join(this, ",")' - -``` -=> -```mdtest-output -"a,b,c" -``` - -Join non-string arrays by first casting: -```mdtest-command -echo '[1,2,3] [10.0.0.1,10.0.0.2]' | zq -z 'yield join(cast(this, <[string]>), "...")' - -``` -=> -```mdtest-output -"1...2...3" -"10.0.0.1...10.0.0.2" -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/kind.md b/versioned_docs/version-v1.1.0/language/functions/kind.md deleted file mode 100644 index c26b7f394..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/kind.md +++ /dev/null @@ -1,59 +0,0 @@ -### Function - -  **kind** — return a value's type category - -### Synopsis - -``` -kind(val: any) -> string -``` -### Description - -The _kind_ function returns the category of the type of `v` as a string, -e.g., "record", "set", "primitive", etc. If `v` is a type value, -then the type category of the referenced type is returned. - -#### Example: - -A primitive value's kind is "primitive": -```mdtest-command -echo '1 "a" 10.0.0.1' | zq -z 'yield kind(this)' - -``` -=> -```mdtest-output -"primitive" -"primitive" -"primitive" -``` - -A complex value's kind is it's complex type category. Try it on -these empty values of various complex types: -```mdtest-command -echo '{} [] |[]| |{}| 1((int64,string))' | zq -z 'yield kind(this)' - -``` -=> -```mdtest-output -"record" -"array" -"set" -"map" -"union" -``` - -A Zed error has kind "error": -```mdtest-command -echo null | zq -z 'yield kind(1/0)' - -``` -=> -```mdtest-output -"error" -``` - -A Zed type's kind is the kind of the type: -```mdtest-command -echo '<{s:string}>' | zq -z 'yield kind(this)' - -``` -=> -```mdtest-output -"record" -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/ksuid.md b/versioned_docs/version-v1.1.0/language/functions/ksuid.md deleted file mode 100644 index 0303d5325..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/ksuid.md +++ /dev/null @@ -1,29 +0,0 @@ -### Function - -  **ksuid** — encode/decode KSUID-style unique identifiers - -### Synopsis - -``` -ksuid() -> bytes -ksuid(b: bytes) -> string -ksuid(s: string) -> bytes -``` -### Description - -The _ksuid_ function either encodes a [KSUID](https://github.com/segmentio/ksuid) -(a byte sequence of length 20) `b` into a Base62 string or decodes -a KSUID Base62 string into a 20-byte Zed bytes value. - -If _ksuid_ is called with no arguments, a new KSUID is generated and -returned as a bytes value. - -#### Example: - -```mdtest-command -echo '{id:0x0dfc90519b60f362e84a3fdddd9b9e63e1fb90d1}' | zq -z 'id := ksuid(id)' - -``` -=> -```mdtest-output -{id:"1zjJzTWWCJNVrGwqB8kZwhTM2fR"} -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/len.md b/versioned_docs/version-v1.1.0/language/functions/len.md deleted file mode 100644 index a70fc3be4..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/len.md +++ /dev/null @@ -1,42 +0,0 @@ -### Function - -  **len** — the type-dependent length of a value - -### Synopsis - -``` -len(v: record|array|set|map|type|bytes|string|ip|net|error) -> int64 -``` -### Description - -The _len_ function returns the length of its argument `val`. -The semantics of this length depend on the value's type. - -Supported types include: -- record -- array -- set -- map -- error -- bytes -- string -- ip -- net -- type - -#### Example: - -Take the length of various types: - -```mdtest-command -echo '[1,2,3] |["hello"]| {a:1,b:2} "hello" 10.0.0.1 1' | zq -z 'yield {this,len:len(this)}' - -``` -=> -```mdtest-output -{this:[1,2,3],len:3} -{this:|["hello"]|,len:1} -{this:{a:1,b:2},len:2} -{this:"hello",len:5} -{this:10.0.0.1,len:4} -{this:1,len:error("len: bad type: int64")} -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/log.md b/versioned_docs/version-v1.1.0/language/functions/log.md deleted file mode 100644 index 119f0cfa2..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/log.md +++ /dev/null @@ -1,41 +0,0 @@ -### Function - -  **log** — natural logarithm - -### Synopsis - -``` -log(val: number) -> float64 -``` -### Description - -The _log_ function returns the natural logarithm of its argument `val`, which -must be numeric. The return value is a float64 or an error. - -### Examples - -The logarithm of various numbers: -```mdtest-command -echo '4 4.0 2.718 -1' | zq -z 'yield log(this)' - -``` -=> -```mdtest-output -1.3862943611198906 -1.3862943611198906 -0.999896315728952 -error("log: illegal argument: -1") -``` - -The largest power of 10 smaller than the input: -```mdtest-command -echo '9 10 20 1000 1100 30000' | zq -z 'yield int64(log(this)/log(10))' - -``` -=> -```mdtest-output -0 -1 -1 -2 -3 -4 -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/lower.md b/versioned_docs/version-v1.1.0/language/functions/lower.md deleted file mode 100644 index 84e075968..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/lower.md +++ /dev/null @@ -1,23 +0,0 @@ -### Function - -  **lower** — convert a string to lower case - -### Synopsis - -``` -lower(s: string) -> string -``` -### Description - -The _lower_ function converts all upper case Unicode characters in `s` -to lower case and returns the result. - -### Examples - -```mdtest-command -echo '"Zed"' | zq -z 'yield lower(this)' - -``` -=> -```mdtest-output -"zed" -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/missing.md b/versioned_docs/version-v1.1.0/language/functions/missing.md deleted file mode 100644 index c4672315f..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/missing.md +++ /dev/null @@ -1,47 +0,0 @@ -### Function - -  **missing** — test for the "missing" error - -### Synopsis - -``` -missing(val: any) -> bool -``` -### Description - -The _missing_ function returns true if its argument is `error("missing")` -and false otherwise. - -This function is often used to test if certain fields do not appear as -expected in a record, e.g., `missing(a)` is true either when `this` is not a record -or when `this` is a record and the field `a` is not present in `this`. - -It's also useful in shaping when applying conditional logic based on the -absence of certain fields: -``` -switch ( - case missing(a) => ... - case missing(b) => ... - default => ... -) -``` - -### Examples - -```mdtest-command -echo '{foo:10}' | zq -z 'yield {yes:missing(bar),no:missing(foo)}' - -echo '{foo:[1,2,3]}' | zq -z 'yield {yes:has(foo[3]),no:has(foo[0])}' - -echo '{foo:{bar:"value"}}' | zq -z 'yield {yes:missing(foo.baz),no:missing(foo.bar)}' - -echo '{foo:10}' | zq -z 'yield {yes:missing(bar+1),no:missing(foo+1)}' - -echo 1 | zq -z 'yield missing(bar)' - -echo '{x:error("missing")}' | zq -z 'yield missing(x)' - -``` -=> -```mdtest-output -{yes:true,no:false} -{yes:false,no:true} -{yes:true,no:false} -{yes:true,no:false} -true -true -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/nameof.md b/versioned_docs/version-v1.1.0/language/functions/nameof.md deleted file mode 100644 index 6fb2509c8..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/nameof.md +++ /dev/null @@ -1,34 +0,0 @@ -### Function - -  **nameof** — the name of a named type - -### Synopsis - -``` -nameof(val: any) -> string -``` -### Description - -The _nameof_ function returns the type name of `val` as a string if `val` is a named type. -Otherwise, it returns `error("missing")`. - -### Examples - -A named type yields its name and unnamed types yield a missing error: -```mdtest-command -echo '80(port=int16) 80' | zq -z 'yield nameof(this)' - -``` -=> -```mdtest-output -"port" -error("missing") -``` - -The missing value can be ignored with quiet: -```mdtest-command -echo '80(port=int16) 80' | zq -z 'yield quiet(nameof(this))' - -``` -=> -```mdtest-output -"port" -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/nest_dotted.md b/versioned_docs/version-v1.1.0/language/functions/nest_dotted.md deleted file mode 100644 index 2a0e33dba..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/nest_dotted.md +++ /dev/null @@ -1,24 +0,0 @@ -### Function - -  **nest_dotted** — transform fields in a record with dotted names -to nested records. - -### Synopsis - -``` -nest_dotted(val: record) -> record -``` -### Description -The _nest_dotted_ function returns a copy of `val` with all dotted field names -converted into nested records. If no argument is supplied to `nest_dotted`, -`nest_dotted` operates on `this`. - -### Examples - -```mdtest-command -echo '{"a.b.c":"foo"}' | zq -z 'yield nest_dotted()' - -``` -=> -```mdtest-output -{a:{b:{c:"foo"}}} -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/network_of.md b/versioned_docs/version-v1.1.0/language/functions/network_of.md deleted file mode 100644 index cb6842f72..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/network_of.md +++ /dev/null @@ -1,53 +0,0 @@ -### Function - -  **network_of** — the network of an IP - -### Synopsis - -``` -network_of(val: ip [, mask: net|int|uint]) -> net -``` -### Description - -The _network_of_ function returns the network of the IP address given -by `val` as determined by the optional `mask`. If `mask` is an integer rather -than a net, it is presumed to be a network prefix of the indicated length. -If `mask` is ommited, then a class A (8 bit), B (16 bit), or C (24 bit) -network is inferred from `val`, which in this case, must be an IPv4 address. - -### Examples - -Compute the network address of an IP given a network mask argument: -```mdtest-command -echo '10.1.2.129' | zq -z 'yield network_of(this, 255.255.255.128/25)' - -``` -=> -```mdtest-output -10.1.2.128/25 -``` -Compute the network address of an IP given an integer prefix argument: -```mdtest-command -echo '10.1.2.129' | zq -z 'yield network_of(this, 25)' - -``` -=> -```mdtest-output -10.1.2.128/25 -``` - -Compute the network address implied by IP classful addressing: -```mdtest-command -echo '10.1.2.129' | zq -z 'yield network_of(this)' - -``` -=> -```mdtest-output -10.0.0.0/8 -``` - -The network of a value that is not an IP is an error: -```mdtest-command -echo 1 | zq -z 'yield network_of(this)' - -``` -=> -```mdtest-output -error("network_of: not an IP") -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/now.md b/versioned_docs/version-v1.1.0/language/functions/now.md deleted file mode 100644 index bdc4dfa60..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/now.md +++ /dev/null @@ -1,32 +0,0 @@ -### Function - -  **now** — the current time - -### Synopsis - -``` -now() -> time -``` -### Description - -The _now_ function takes no arguments and returns the current UTC time as a value of type `time`. - -This is useful to timestamp events in a data pipeline, e.g., -when generating errors that are marked with their time of occurrence: -``` -switch ( - ... - default => yield error({ts:now(), ...}) -) -``` - -### Examples - -``` -echo null | zq -z 'yield now()' - -``` -=> -``` -2022-02-06T18:35:35.053843Z -``` -(at the time this document was written) diff --git a/versioned_docs/version-v1.1.0/language/functions/order.md b/versioned_docs/version-v1.1.0/language/functions/order.md deleted file mode 100644 index 723af5c42..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/order.md +++ /dev/null @@ -1,69 +0,0 @@ -### Function - -  **order** — reorder record fields - -### Synopsis - -``` -order(val: any, t: type) -> any -``` - -### Description - -The _order_ function changes the order of fields in the input value `val` -to match the order of records in type `t`. Ordering is useful when the -input is in an unordered format (such as JSON), to ensure that all records -have the same known order. - -If `val` is a record (or if any of its nested values is a record): -* order passes through "extra" fields not present in the type value, -* extra fields in the input are added to the right-hand side, ordered lexicographically, -* missing fields are ignored, and -* types of leaf values are ignored, i.e., there is no casting. - -Note that lexicographic order for fields in a record can be achieved with -the empty record type, i.e., -``` -order(val, <{}>) -``` - -### Examples - -_Order a record_ -```mdtest-command -echo '{b:"foo", a:1}' | zq -z 'order(this, <{a:int64,b:string}>)' - -``` -produces -```mdtest-output -{a:1,b:"foo"} -``` -_Order fields lexicographically_ -```mdtest-command -echo '{c:0, a:1, b:"foo"}' | zq -z 'order(this, <{}>)' - -``` -produces -```mdtest-output -{a:1,b:"foo",c:0} -``` - -TBD: fix this bug or remove example... - -_Order an array of records_ -```mdtest-command-skip -echo '[{b:1,a:1},{a:2,b:2}]' | zq -z 'order(this, <[{a:int64,b:int64}]>)' - -``` -produces -```mdtest-output-skip -[{a:1,b:1},{a:2,b:2}] -``` - -_Non-records are returned unmodified_ -```mdtest-command -echo '10.0.0.1 1 "foo"' | zq -z 'fill(this, <{a:int64,b:int64}>)' - -``` -produces -```mdtest-output -10.0.0.1 -1 -"foo" -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/parse_uri.md b/versioned_docs/version-v1.1.0/language/functions/parse_uri.md deleted file mode 100644 index 7e86e9395..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/parse_uri.md +++ /dev/null @@ -1,59 +0,0 @@ -### Function - -  **parse_uri** — parse a string URI into a structured record - -### Synopsis - -``` -parse_uri(uri: string) -> record -``` -### Description - -The _parse_uri_ function parses the `uri` argument that must have the form of a -[Universal Resource Identifier](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier) -into a structured URI comprising the parsed components as a Zed record -with the following type signature: -``` -{ - scheme: string, - opaque: string, - user: string, - password: string, - host: string, - port: uint16, - path: string, - query: |{string:[string]}|, - fragment: string -} -``` - -### Examples - -```mdtest-command -echo '"scheme://user:password@host:12345/path?a=1&a=2&b=3&c=#fragment"' | zq -Z 'yield parse_uri(this)' - -``` -=> -```mdtest-output -{ - scheme: "scheme", - opaque: null (string), - user: "user", - password: "password", - host: "host", - port: 12345 (uint16), - path: "/path", - query: |{ - "a": [ - "1", - "2" - ], - "b": [ - "3" - ], - "c": [ - "" - ] - }|, - fragment: "fragment" -} -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/parse_zson.md b/versioned_docs/version-v1.1.0/language/functions/parse_zson.md deleted file mode 100644 index 72c5a52ca..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/parse_zson.md +++ /dev/null @@ -1,35 +0,0 @@ -### Function - -  **parse_zson** — parse ZSON or JSON text into a Zed value - -### Synopsis - -``` -parse_zson(s: string) -> any -``` -### Description - -The _parse_zson_ function parses the `s` argument that must be in the form -of ZSON or JSON into a Zed value of any type. This is analogous to JavaScript's -`JSON.parse()` function. - -### Examples - -_Parse ZSON text_ - -```mdtest-command -echo '{foo:"{a:\"1\",b:2}"}' | zq -z 'foo := parse_zson(foo)' - -``` -=> -```mdtest-output -{foo:{a:"1",b:2}} -``` - -_Parse JSON text_ -```mdtest-command -echo '{"foo": "{\"a\": \"1\", \"b\": 2}"}' | zq -z 'foo := parse_zson(foo)' - -``` -=> -```mdtest-output -{foo:{a:"1",b:2}} -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/pow.md b/versioned_docs/version-v1.1.0/language/functions/pow.md deleted file mode 100644 index 6a0681875..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/pow.md +++ /dev/null @@ -1,23 +0,0 @@ -### Function - -  **pow** — exponential function of any base - -### Synopsis - -``` -pow(x: number, y: number) -> float64 -``` -### Description - -The _pow_ function returns the value `x` raised to the power of `y`. -The return value is a float64 or an error. - -### Examples - -```mdtest-command -echo '2' | zq -z 'yield pow(this, 5)' - -``` -=> -```mdtest-output -32. -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/quiet.md b/versioned_docs/version-v1.1.0/language/functions/quiet.md deleted file mode 100644 index bd19a9239..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/quiet.md +++ /dev/null @@ -1,43 +0,0 @@ -### Function - -  **quiet** — quiet "missing" errors - -### Synopsis - -``` -quiet(val: any) -> any -``` -### Description -The _quiet_ function returns its argument `val` unless `val` is -`error("missing")`, in which case it returns `error("quiet")`. -Various operators and functions treat quiet errors differently than -missing errors, in particular, dropping them instead of propagating them. -Quiet errors are ignored by operators `cut`, `summarize`, and `yield`. - -### Examples - -Yield processes a quiet error and thus no output: -```mdtest-command -echo 'error("missing")' | zq -z 'yield quiet(this)' - -``` -=> -```mdtest-output -``` - -Without quiet, yield produces the missing error: -```mdtest-command -echo 'error("missing")' | zq -z 'yield this' - -``` -=> -```mdtest-output -error("missing") -``` - -The `cut` operator drops quiet errors but retains missing errors: -```mdtest-command -echo '{a:1}' | zq -z 'cut b:=x+1,c:=quiet(x+1),d:=quiet(a+1)' - -``` -=> -```mdtest-output -{b:error("missing"),d:2} -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/replace.md b/versioned_docs/version-v1.1.0/language/functions/replace.md deleted file mode 100644 index 997d4007e..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/replace.md +++ /dev/null @@ -1,23 +0,0 @@ -### Function - -  **replace** — replace one string for another - -### Synopsis - -``` -replace(s: string, old: string, new: string) -> string -``` -### Description - -The _replace_ function substitutes all instances of the string `old` -that occur in string `s` with the string `new`. - -#### Example: - -```mdtest-command -echo '"oink oink oink"' | zq -z 'yield replace(this, "oink", "moo")' - -``` -=> -```mdtest-output -"moo moo moo" -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/round.md b/versioned_docs/version-v1.1.0/language/functions/round.md deleted file mode 100644 index 001a2eaa0..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/round.md +++ /dev/null @@ -1,26 +0,0 @@ -### Function - -  **round** — round a number - -### Synopsis - -``` -round(val: number) -> number -``` -### Description - -The _round_ function returns the number `val` rounded to the nearest integer value. -which must be a numeric type. The return type retains the type of the argument. - -### Examples - -```mdtest-command -echo '3.14 -1.5 0 1' | zq -z 'yield round(this)' - -``` -=> -```mdtest-output -3. --2. -0 -1 -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/rune_len.md b/versioned_docs/version-v1.1.0/language/functions/rune_len.md deleted file mode 100644 index 2b46bbb23..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/rune_len.md +++ /dev/null @@ -1,36 +0,0 @@ -### Function - -  **rune_len** — length of a string in Unicode code points - -### Synopsis - -``` -rune_len(s: string) -> int64 -``` -### Description - -The _rune_len_ function returns the number of Unicode code points in -the argument string `s`. Since Zed strings are always encoded as UTF-8, -this length is the same as the number of UTF-8 characters. - -### Examples - -The length in UTF-8 characters of a smiley is 1: -```mdtest-command -echo '"hello" "😎"' | zq -z 'yield rune_len(this)' - -``` -=> -```mdtest-output -5 -1 -``` - -The length in bytes of a smiley is 4: -```mdtest-command -echo '"hello" "😎"' | zq -z 'yield len(bytes(this))' - -``` -=> -```mdtest-output -5 -4 -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/shape.md b/versioned_docs/version-v1.1.0/language/functions/shape.md deleted file mode 100644 index ca6ac831a..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/shape.md +++ /dev/null @@ -1,33 +0,0 @@ -### Function - -  **shape** — apply cast, fill, and order - -### Synopsis - -``` -shape(val: any, t: type) -> any -``` - -### Description - -The _shape_ function applies the -[cast](cast.md), -[fill](fill.md), and -[order](order.md) functions to its input to provide an -overall data shaping operation. - -Note that _shape_ does not perform a _crop_ function so -extra fields in the input are propagated to the output. - -### Examples - -_Shape input records_ -```mdtest-command -echo '{b:1,a:2}{a:3}{b:4,c:5}' | zq -z 'shape(this, <{a:int64,b:string}>)' - -``` -produces -```mdtest-output -{a:2,b:"1"} -{a:3,b:null(string)} -{a:null(int64),b:"4",c:5} -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/split.md b/versioned_docs/version-v1.1.0/language/functions/split.md deleted file mode 100644 index eeec8f588..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/split.md +++ /dev/null @@ -1,35 +0,0 @@ -### Function - -  **split** — slice a string into an array of strings - -### Synopsis - -``` -split(s: string, sep: string) -> [string] -``` -### Description - -The _split_ function slices string `s` into all substrings separated by the -string`sep` appearing in `s` and returns an array of the substrings -spanning those separators. - -### Examples - -Split a semi-colon delimited list of fruits: -```mdtest-command -echo '"apple;banana;pear;peach"' | zq -z 'yield split(this,";")' - -``` -=> -```mdtest-output -["apple","banana","pear","peach"] -``` - -Split a comma-separated list of IPs and cast the array of strings to an -array of IPs: -```mdtest-command -echo '"10.0.0.1,10.0.0.2,10.0.0.3"' | zq -z 'yield cast(split(this,","),<[ip]>)' - -``` -=> -```mdtest-output -[10.0.0.1,10.0.0.2,10.0.0.3] -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/sqrt.md b/versioned_docs/version-v1.1.0/language/functions/sqrt.md deleted file mode 100644 index 959f285b0..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/sqrt.md +++ /dev/null @@ -1,26 +0,0 @@ -### Function - -  **sqrt** — square root of a number - -### Synopsis -``` -sqrt(val: number) -> float64 -``` -### Description -The _sqrt_ function returns the square root of its argument `val`, which -must be numeric. The return value is a float64. Negative values -result in `NaN`. - -### Examples - -The logarithm of a various numbers: -```mdtest-command -echo '4 2. 1e10 -1' | zq -z 'yield sqrt(this)' - -``` -=> -```mdtest-output -2. -1.4142135623730951 -100000. -NaN -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/trim.md b/versioned_docs/version-v1.1.0/language/functions/trim.md deleted file mode 100644 index 479295b8a..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/trim.md +++ /dev/null @@ -1,23 +0,0 @@ -### Function - -  **trim** — strip leading and trailing whitespace - -### Synopsis - -``` -trim(s: string) -> string -``` -### Description - -The _trim_ function converts stips all leading and trailing whitespace -from string argument `s` and returns the result. - -### Examples - -```mdtest-command -echo '" = Zed = "' | zq -z 'yield trim(this)' - -``` -=> -```mdtest-output -"= Zed =" -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/typename.md b/versioned_docs/version-v1.1.0/language/functions/typename.md deleted file mode 100644 index a3ba4054f..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/typename.md +++ /dev/null @@ -1,40 +0,0 @@ -### Function - -  **typename** — look up and return a named type - -### Synopsis - -``` -typename(s: string) -> type -``` -### Description - -The _typename_ function returns the [type](../../formats/zson.md#25-types) of the -named type give by `name` if it exists. Otherwise, `error("missing")` is returned. - -### Examples - -Return a simple named type with a string constant argument: -```mdtest-command -echo '80(port=int16)' | zq -z 'yield typename("port")' - -``` -=> -```mdtest-output - -``` -Return a named type using an expression: -```mdtest-command -echo '{name:"port",p:80(port=int16)}' | zq -z 'yield typename(name)' - -``` -=> -```mdtest-output - -``` -The result is `error("missing")` if the type name does not exist: -```mdtest-command -echo '80' | zq -z 'yield typename("port")' - -``` -=> -```mdtest-output -error("missing") -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/typeof.md b/versioned_docs/version-v1.1.0/language/functions/typeof.md deleted file mode 100644 index 5febcbb89..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/typeof.md +++ /dev/null @@ -1,40 +0,0 @@ -### Function - -  **typeof** — the type of a value - -### Synopsis - -``` -typeof(val: any) -> type -``` -### Description - -The _typeof_ function returns the [type](../../formats/zson.md#25-types) of -its argument `val`. Types in Zed are first class so the returned type is -also a Zed value. The type of a type is type `type`. - -### Examples - -The types of various values: - -```mdtest-command -echo '1 "foo" 10.0.0.1 [1,2,3] {s:"foo"} null error("missing")' | zq -z 'yield typeof(this)' - -``` -=> -```mdtest-output - - - -<[int64]> -<{s:string}> - - -``` -The type of a type is type `type`: -```mdtest-command -echo null | zq -z 'yield typeof(typeof(this))' - -``` -=> -```mdtest-output - -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/typeunder.md b/versioned_docs/version-v1.1.0/language/functions/typeunder.md deleted file mode 100644 index 794faefc8..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/typeunder.md +++ /dev/null @@ -1,24 +0,0 @@ -### Function - -  **typeunder** — the underlying type of a value - -### Synopsis - -``` -typeunder(val: any) -> type -``` -### Description - -The _typeunder_ function returns the type of its argument `val`. If this type is a -[named type](../../formats/zed.md#3-named-type), then the referenced type is -returned instead of the named type. - -### Examples - -```mdtest-command -echo '{which:"chocolate"}(=flavor)' | zq -z 'yield {typeof:typeof(this),typeunder:typeunder(this)}' - -``` -=> -```mdtest-output -{typeof:,typeunder:<{which:string}>} -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/under.md b/versioned_docs/version-v1.1.0/language/functions/under.md deleted file mode 100644 index 54b850aff..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/under.md +++ /dev/null @@ -1,66 +0,0 @@ -### Function - -  **under** — the underlying value - -### Synopsis - -``` -under(val: any) -> any -``` -### Description - -The _under_ function returns the value underlying the argument `val`: -* for unions, it returns the value as its elemental type of the union, -* for errors, it returns the value that the error wraps, -* for types, it returns the value typed as `typeunder()` indicates; otherwise, -* it returns `val` unmodified. - -### Examples - -Unions are unwrapped: -```mdtest-command -echo '1((int64,string)) "foo"((int64,string))' | zq -z 'yield this' - -echo '1((int64,string)) "foo"((int64,string))' | zq -z 'yield under(this)' - -``` -=> -```mdtest-output -1((int64,string)) -"foo"((int64,string)) -1 -"foo" -``` - -Errors are unwrapped: -```mdtest-command -echo 'error("foo") error({err:"message"})' | zq -z 'yield this' - -echo 'error("foo") error({err:"message"})' | zq -z 'yield under(this)' - -``` -=> -```mdtest-output -error("foo") -error({err:"message"}) -"foo" -{err:"message"} -``` - -Values of named types are unwrapped: -```mdtest-command -echo '80(port=uint16)' | zq -z 'yield this' - -echo '80(port=uint16)' | zq -z 'yield under(this)' - -``` -=> -```mdtest-output -80(port=uint16) -80(uint16) -``` -Values that are not wrapped are unmodified: -```mdtest-command -echo '1 "foo" {x:1}' | zq -z 'yield under(this)' - -``` -=> -```mdtest-output -1 -"foo" - -{x:1} -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/unflatten.md b/versioned_docs/version-v1.1.0/language/functions/unflatten.md deleted file mode 100644 index eb8f1fc20..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/unflatten.md +++ /dev/null @@ -1,33 +0,0 @@ -### Function - -  **unflatten** — transform an array of key/value records into a -record. - -### Synopsis - -``` -unflatten(val: [{key:[string],value:any}]) -> record -``` -### Description -The _unflatten_ function converts the key/value records in array `val` into -a single record. _unflatten_ is the inverse of _flatten_, i.e., `unflatten(flatten(r))` -will produce a record identical to `r`. - -### Examples -Simple: -```mdtest-command -echo '[{key:["a"],value:1},{key:["b"],value:2}]' | zq -z 'yield unflatten(this)' - -``` -=> -```mdtest-output -{a:1,b:2} -``` - -Flatten to unflatten: -```mdtest-command -echo '{a:1,rm:2}' | zq -z 'over flatten(this) => (key[0] != "rm" | yield collect(this)) | yield unflatten(this)' - -``` -=> -```mdtest-output -{a:1} -``` diff --git a/versioned_docs/version-v1.1.0/language/functions/upper.md b/versioned_docs/version-v1.1.0/language/functions/upper.md deleted file mode 100644 index ea999ddd0..000000000 --- a/versioned_docs/version-v1.1.0/language/functions/upper.md +++ /dev/null @@ -1,23 +0,0 @@ -### Function - -  **upper** — convert a string to upper case - -### Synopsis - -``` -upper(s: string) -> string -``` -### Description - -The _upper_ function converts all lower case Unicode characters in `s` -to upper case and returns the result. - -### Examples - -```mdtest-command -echo '"Zed"' | zq -z 'yield upper(this)' - -``` -=> -```mdtest-output -"ZED" -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/README.md b/versioned_docs/version-v1.1.0/language/operators/README.md deleted file mode 100644 index 3787afbfe..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# Operators - ---- - -Dataflow operators process a sequence of input values to create an output sequence -and appear as the components of a dataflow pipeline. - -* [assert](assert.md) - evaluate an assertion -* [combine](combine.md) - combine parallel paths into a single output -* [cut](cut.md) - extract subsets of record fields into new records -* [drop](drop.md) - drop fields from record values -* [from](from.md) - source data from pools, files, or URIs -* [fork](fork.md) - copy values to parallel paths -* [fuse](fuse.md) - coerce all input values into a merged type -* [head](head.md) - copy leading values of input sequence -* [join](join.md) - combine data from two inputs using a join predicate -* [over](over.md) - traverse nested values as a lateral query -* [put](put.md) - add or modify fields of records -* [rename](rename.md) - change the name of record fields -* [sample](sample.md) - select one value of each shape -* [search](search.md) - select values based on a search expression -* [sort](sort.md) - sort values -* [summarize](summarize.md) - perform aggregations -* [switch](switch.md) - route values based on cases -* [tail](tail.md) - copy trailing values of input sequence -* [uniq](uniq.md) - deduplicate adjacent values -* [where](where.md) - select values based on a Boolean expression -* [yield](yield.md) - emit values from expressions diff --git a/versioned_docs/version-v1.1.0/language/operators/_category_.yaml b/versioned_docs/version-v1.1.0/language/operators/_category_.yaml deleted file mode 100644 index cae80928b..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/_category_.yaml +++ /dev/null @@ -1,2 +0,0 @@ -position: 3 -label: Operators diff --git a/versioned_docs/version-v1.1.0/language/operators/assert.md b/versioned_docs/version-v1.1.0/language/operators/assert.md deleted file mode 100644 index a79f28989..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/assert.md +++ /dev/null @@ -1,32 +0,0 @@ -### Operator - -  **assert** — evaluate an assertion - -### Synopsis - -``` -assert -``` -### Description - -The `assert` operator evaluates the Boolean expression `` for each -input value, yielding its input value if `` evaluates to true or a -structured error if it does not. - -### Examples - -```mdtest-command -echo {a:1} | zq -z 'assert a > 0' - -``` -=> -```mdtest-output -{a:1} -``` - -```mdtest-command -echo {a:-1} | zq -z 'assert a > 0' - -``` -=> -```mdtest-output -error({message:"assertion failed",expr:"a > 0",on:{a:-1}}) -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/combine.md b/versioned_docs/version-v1.1.0/language/operators/combine.md deleted file mode 100644 index 67a384616..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/combine.md +++ /dev/null @@ -1,32 +0,0 @@ -### Operator - -  **combine** — combine parallel paths into a single output - -### Synopsis - -``` -( => ... => ...) | ... -``` -### Description - -The implied `combine` operator merges inputs from multiple upstream legs of -the dataflow path into a single output. The order of values in the combined -output is undefined. - -You need not explicit reference the operator with any text. Instead, the -mere existence of a merge point in the flow graph implies its existence -and its semantics of undefined merge order. - -### Examples - -_Copy input to two paths and combine with the implied operator_ -```mdtest-command -echo '1 2' | zq -z 'fork (=>pass =>pass) | sort this' - -``` -=> -```mdtest-output -1 -1 -2 -2 -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/cut.md b/versioned_docs/version-v1.1.0/language/operators/cut.md deleted file mode 100644 index e766ca0f8..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/cut.md +++ /dev/null @@ -1,76 +0,0 @@ -### Operator - -  **cut** — extract subsets of record fields into new records - -### Synopsis - -``` -cut [:=] [, [:=] ...] -``` -### Description - -The `cut` operator extracts values from each input record in the -form of one or more [field assignments](../overview.md#25-field-assignments), -creating one field for each expression. Unlike the `put` operator, -which adds or modifies the fields of a record, `cut` retains only the -fields enumerated, much like a SQL projection. - -Each `` expression must be a field reference expressed as a dotted path or sequence of -constant index operations on `this`, e.g., `a.b` or `this["a"]["b"]`. - -Each right-hand side `` can be any Zed expression and is optional. - -When the right-hand side expressions are omitted, -the _cut_ operation resembles the Unix shell command, e.g., -``` -... | cut a,c | ... -``` -If an expression results in `error("quiet")`, the corresponding field is omitted -from the output. This allows you to wrap expressions in a `quiet()` function -to filter out missing errors. - -If an input value to cut is not a record, then the cut still operates as defined -resulting in `error("missing")` for expressions that reference fields of `this`. - -Note that when the field references are all top level, -`cut` is a special case of a yield with a -[record literal](../overview.md#6112-record-expressions) having the form: -``` -yield {: [, :...]} -``` - -### Examples - -_A simple Unix-like cut_ -```mdtest-command -echo '{a:1,b:2,c:3}' | zq -z 'cut a,c' - -``` -=> -```mdtest-output -{a:1,c:3} -``` -_Missing fields show up as missing errors_ -```mdtest-command -echo '{a:1,b:2,c:3}' | zq -z 'cut a,d' - -``` -=> -```mdtest-output -{a:1,d:error("missing")} -``` -_The missing fields can be ignored with quiet_ -```mdtest-command -echo '{a:1,b:2,c:3}' | zq -z 'cut a:=quiet(a),d:=quiet(d)' - -``` -=> -```mdtest-output -{a:1} -``` -_Non-record values generate missing errors for fields not present in a non-record `this`_ -```mdtest-command -echo '1 {a:1,b:2,c:3}' | zq -z 'cut a,b' - -``` -=> -```mdtest-output -{a:error("missing"),b:error("missing")} -{a:1,b:2} -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/drop.md b/versioned_docs/version-v1.1.0/language/operators/drop.md deleted file mode 100644 index 690587a17..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/drop.md +++ /dev/null @@ -1,35 +0,0 @@ -### Operator - -  **drop** — drop fields from record values - -### Synopsis - -``` -drop [, ...] -``` -### Description - -The `drop` operator removes one or more fields from records in the input sequence -and copies the modified records to its output. If a field to be dropped -is not present, then no effect for the field occurs. In particular, -non-record values are copied unmodified. - -### Examples - -_Drop of a field_ -```mdtest-command -echo '{a:1,b:2,c:3}' | zq -z 'drop b' - -``` -=> -```mdtest-output -{a:1,c:3} -``` -_Non-record values are copied to output_ -```mdtest-command -echo '1 {a:1,b:2,c:3}' | zq -z 'drop a,b' - -``` -=> -```mdtest-output -1 -{c:3} -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/fork.md b/versioned_docs/version-v1.1.0/language/operators/fork.md deleted file mode 100644 index 95a636521..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/fork.md +++ /dev/null @@ -1,35 +0,0 @@ -### Operator - -  **fork** — copy values to parallel paths - -### Synopsis - -``` -fork { - => - => - ... -} -``` -### Description - -The `fork` operator copies each input value to multiple, parallel legs of -the dataflow path. - -The output of a fork consists of multiple legs that must be merged. -If the downstream operator expects a single input, then the output legs are -merged with an automatically inserted [combine operator](combine.md). - -### Examples - -_Copy input to two paths and merge_ -```mdtest-command -echo '1 2' | zq -z 'fork (=>pass =>pass) | sort this' - -``` -=> -```mdtest-output -1 -1 -2 -2 -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/from.md b/versioned_docs/version-v1.1.0/language/operators/from.md deleted file mode 100644 index 36f708e85..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/from.md +++ /dev/null @@ -1,73 +0,0 @@ -### Operator - -  **from** — source data from pools, files, or URIs - -### Synopsis - -``` -from [@] [range ] [to ] [ => ] -file [format ] -get [format ] -from ( - pool [@] [range ] [to ] [ => ] - file [format ] [ => ] - get [format ] [ => ] - ... -) -``` -### Description - -The `from` operator identifies one or more data sources and transmits -their data to its output. A data source can be -* the name of a data pool in a Zed lake; -* a path to a file; or -* an HTTP, HTTPS, or S3 URI. -Paths and URIs may be followed by an optional format specifier. - -In the first three forms, a single source is connected to a single output. -In the fourth form, multiple sources are accessed in parallel and may be -[joined](join.md), [combined](combine.md), or [merged](merge.md). - -A data path can be split with the `fork` operator as in -``` -from PoolOne | fork ( - => op1 | op2 | ... - => op1 | op2 | ... -) | merge ts | ... -``` - -Or multiple pools can be accessed and, for example, joined: -``` -from ( - pool PoolOne => op1 | op2 | ... - pool PoolTwo => op1 | op2 | ... -) | join on key=key | ... -``` - -Similarly, data can be routed to different paths with replication -using `switch`: -``` -from ... | switch color ( - case "red" => op1 | op2 | ... - case "blue" => op1 | op2 | ... - default => op1 | op2 | ... -) | ... -``` - -The output of a fork consists of multiple legs that must be merged. -If the downstream operator expects a single input, then the output legs are -merged with an automatically inserted [combine operator](combine.md). - -### Examples - -_Copy input to two paths and merge_ -```mdtest-command -echo '1 2' | zq -z 'fork (=>pass =>pass) | sort this' - -``` -=> -```mdtest-output -1 -1 -2 -2 -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/fuse.md b/versioned_docs/version-v1.1.0/language/operators/fuse.md deleted file mode 100644 index a9b2dad29..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/fuse.md +++ /dev/null @@ -1,83 +0,0 @@ -### Operator - -  **fuse** — coerce all input values into a merged type - -### Synopsis - -``` -fuse -``` -### Description - -The `fuse` operator reads all of its input, computes an "intelligent merge" -of varied types in the input, then adjusts each output value -to conform to the merged type. - -The merged type is constructed intelligently in the sense that type -`{a:string}` and `{b:string}` is fused into type `{a:string,b:string}` -instead of the Zed union type `({a:string},{b:string})`. - -> TBD: document the algorithm here in more detail. -> The operator takes no paramters but we are experimenting with ways to -> control how field with the same name but different types are merged -> especially in light of complex types like arrays, sets, and so forth. - -Because all values of the input must be read to compute the union, -`fuse` may spill its input to disk when memory limits are exceeded. - -`Fuse` is not normally needed for Zed data as the Zed data model supports -heterogenous sequences of values. However, `fuse` can be quite useful -during data exploration when sampling or filtering data to look at -slices of raw data that are fused together. `Fuse` is also useful for -transforming arbitrary Zed data to prepare it for formats that require -a uniform schema like Parquet or a tabular structure like CSV. -Unfortunately, when data leaves the Zed format using `fuse` to accomplish this, -the original data must be altered to fit into the rigid structure of -these output formats. - -A fused type over many heterogeneous values also represents a typical -design pattern of a data warehouse where a single very-wide schema -defines slots for all possible input values where the columns are -sparsely populated by each row value as the missing columns are set to null. -Zed data is super-structured, and fortunately, does not require such a structure. - -### Examples - -_Fuse two records_ -```mdtest-command -echo '{a:1}{b:2}' | zq -z fuse - -``` -=> -```mdtest-output -{a:1,b:null(int64)} -{a:null(int64),b:2} -``` -_Fuse records with type variation_ -```mdtest-command -echo '{a:1}{a:"foo"}' | zq -z fuse - -``` -=> -```mdtest-output -{a:1((int64,string))} -{a:"foo"((int64,string))} -``` -_Fuse records with complex type variation_ -```mdtest-command -echo '{a:[1,2]}{a:["foo","bar"],b:10.0.0.1}' | zq -z fuse - -``` -=> -```mdtest-output -{a:[1,2]([(int64,string)]),b:null(ip)} -{a:["foo","bar"]([(int64,string)]),b:10.0.0.1} -``` -_The table format clarifies what fuse does_ -```mdtest-command -echo '{a:1}{b:2}{a:3}' | zq -f table fuse - -``` -=> -```mdtest-output -a b -1 - -- 2 -3 - -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/head.md b/versioned_docs/version-v1.1.0/language/operators/head.md deleted file mode 100644 index d5a210479..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/head.md +++ /dev/null @@ -1,34 +0,0 @@ -### Operator - -  **head** — copy leading values of input sequence - -### Synopsis - -``` -head [ n ] -``` -### Description - -The `head` operator copies the first `n` values from its input to its output -and ends the sequence thereafter. `n` must be an integer. - -### Examples - -_Grab first two values of arbitrary sequence_ -```mdtest-command -echo '1 "foo" [1,2,3]' | zq -z 'head 2' - -``` -=> -```mdtest-output -1 -"foo" -``` - -_Grab the first record of a record sequence_ -```mdtest-command -echo '{a:"hello"}{b:"world"}' | zq -z head - -``` -=> -```mdtest-output -{a:"hello"} -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/join.md b/versioned_docs/version-v1.1.0/language/operators/join.md deleted file mode 100644 index 2a483e822..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/join.md +++ /dev/null @@ -1,34 +0,0 @@ -### Operator - -  **join** — combine data from two inputs using a join predicate - -### Synopsis - -``` -( => left path => right path ) -| [anti|inner|left|right] join on = [:=, ...] -``` -### Description - -The `join` operator combines records from two inputs based on whether -the `` expression (evaluated in the context of the left input) -is equal to the `` expression (evaluated in the context of -the right input) omitting values where there is no match (or including them -in the case of anti join). - -The available join types are: -* _inner_ - output only values that match -* _left_ - output all left values with merged components from `` -* _right_ - output as a left join but with the roles of the inputs and `` reversed -* _anti_ - output left values whose left key does not have a matching right key - -For anti join, the `` is undefined and thus cannot be specified. - -> Currently, only exact equi-join is supported and the inputs must be sorted -> in ascending order by their respective keys. Also, the join keys must -> be field expressions. A future version of join will not require sorted inputs -> and will have more flexible join expressions. - -### Examples - -The [join tutorial](../../tutorials/join.md) includes several examples. diff --git a/versioned_docs/version-v1.1.0/language/operators/merge.md b/versioned_docs/version-v1.1.0/language/operators/merge.md deleted file mode 100644 index 35e275a38..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/merge.md +++ /dev/null @@ -1,29 +0,0 @@ -### Operator - -  **merge** — combine parallel paths into a single, ordered output - -### Synopsis - -``` -( => ... => ...) | merge [, , ...] -``` -### Description - -The `merge` operator merges inputs from multiple upstream legs of -the dataflow path into a single output. The order of values in the combined -output is determined by the `` arguments, which act as sort expressions -where the values from the upstream paths are forwarded based on these expressions. - -### Examples - -_Copy input to two paths and combine -```mdtest-command -echo '1 2' | zq -z 'fork (=>pass =>pass) | merge this' - -``` -=> -```mdtest-output -1 -1 -2 -2 -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/over.md b/versioned_docs/version-v1.1.0/language/operators/over.md deleted file mode 100644 index 346524501..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/over.md +++ /dev/null @@ -1,148 +0,0 @@ -### Operator - -  **over** — traverse nested values as a lateral query - -### Synopsis - -``` -over [, ...] -over [, ...] [with = [, ... [=]] => ( ) -``` -The `over` operator traverses complex values to create a new sequence -of derived values (e.g., the elements of an array) and either -(in the first form) sends the new values directly to its output or -(in the second form) sends the values to a scoped computation as indicated -by ``, which may represent any Zed subquery operating on the -derived sequence of values as `this`. - -Each expression `` is evaluated in left-to-right order and derived sequences are -generated from each such result depending on its types: -* an array value generates each of its element, -* a map value generates a sequence of records of the form `{key:,value:}` for each -entry in the map, and -* all other values generate a single value equal to itself. - -Records can be converted to maps with the [_flatten_ function](../functions/flatten.md) -resulting in a map that can be traversed, -e.g., if `this` is a record, it can be traversed with `over flatten(this)`. - -The nested subquery depicted as `` is called a "lateral query" as the -outer query operates on the top-level sequence of values while the lateral -query operates on subsequences of values derived from each input value. -This pattern rhymes with the SQL pattern of a "lateral join", which runs a -SQL subquery for each row of the outer query's table. - -In a Zed lateral query, each input value induces a derived subsequence and -for each such input, the lateral query runs to completion and yields its results. -In this way, operators like `sort` and `summarize`, which operate on their -entire input, run to completion for each subsequence and yield to the output the -lateral result set for each outer input as a sequence of values. - -Within the lateral query, `this` refers to the values of the subsequence thereby -preventing lateral expressions from accessing the outer `this`. -To accommodate such references, the _over_ operator includes a _with_ clause -that binds arbitrary expressions evaluated in the outer scope -to variables that may be referenced by name in the lateral scope. - -> Note that any such variable definitions override implied field references -> of `this`. If a both a field named "x" and a variable named "x" need be -> referenced in the lateral scope, the field reference should be qualified as `this.x` -> while the variable is referenced simply as `x`. - -Lateral queries may be nested to arbitrary depth and accesses to variables -in parent lateral query bodies follows lexical scoping. - -### Examples - -_Over evaluates each expression and emits it_ -```mdtest-command -echo null | zq -z 'over 1,2,"foo"' - -``` -=> -```mdtest-output -1 -2 -"foo" -``` -_The over clause is evaluated once per each input value_ -```mdtest-command -echo "null null" | zq -z 'over 1,2' - -``` -=> -```mdtest-output -1 -2 -1 -2 -``` -_Array elements are enumerated_ -```mdtest-command -echo null | zq -z 'over [1,2],[3,4,5]' - -``` -=> -```mdtest-output -1 -2 -3 -4 -5 -``` -_Over traversing an array_ -```mdtest-command -echo '{a:[1,2,3]}' | zq -z 'over a' - -``` -=> -```mdtest-output -1 -2 -3 -``` -_Filter the traversed values_ - -```mdtest-command -echo '{a:[6,5,4]} {a:[3,2,1]}' | zq -z 'over a | this % 2 == 0' - -``` -=> -```mdtest-output -6 -4 -2 -``` -_Aggregate the traversed values_ - -```mdtest-command -echo '{a:[1,2]} {a:[3,4,5]}' | zq -z 'over a | sum(this)' - -``` -=> -```mdtest-output -{sum:15} -``` -_Aggregate the traversed values in a lateral query_ -```mdtest-command -echo '{a:[1,2]} {a:[3,4,5]}' | zq -z 'over a => ( sum(this) )' - -``` -=> -```mdtest-output -{sum:3} -{sum:12} -``` -_Access the outer values in a lateral query_ -```mdtest-command -echo '{a:[1,2],s:"foo"} {a:[3,4,5],s:"bar"}' | zq -z 'over a with s => (sum(this) | yield {s,sum})' - -``` -=> -```mdtest-output -{s:"foo",sum:3} -{s:"bar",sum:12} -``` -_Traverse a record by flattening it_ -```mdtest-command -echo '{s:"foo",r:{a:1,b:2}} {s:"bar",r:{a:3,b:4}} ' | zq -z 'over flatten(r) with s => (yield {s,key:key[0],value})' - -``` -=> -```mdtest-output -{s:"foo",key:"a",value:1} -{s:"foo",key:"b",value:2} -{s:"bar",key:"a",value:3} -{s:"bar",key:"b",value:4} -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/put.md b/versioned_docs/version-v1.1.0/language/operators/put.md deleted file mode 100644 index ca2212436..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/put.md +++ /dev/null @@ -1,86 +0,0 @@ -### Operator - -  **put** — add or modify fields of records - -### Synopsis -``` -[put] := [, := ...] -``` -### Description - -The `put` operator modifies its input with -one or more [field assignments](../overview.md#25-field-assignments). -Each expression is evaluated based on the input record -and the result is either assigned to a new field of the input record if it does not -exist, or the existing field is modified in its original location with the result. - -New fields are append in left-to-right order to the right of existing record fields -while modified fields are mutated in place. - -If multiple fields are written in a single `put`, all the new field values are -computed first and then they are all written simultaneously. As a result, -a computed value cannot be referenced in another expression. If you need -to re-use a computed result, this can be done by chaining multiple `put` operators. - -The `put` keyword is optional since it is an -[implied operator](../overview.md#26-implied-operators). - -Each `` expression must be a field reference expressed as a dotted path or one more -constant index operations on `this`, e.g., `a.b`, `this["a"]["b"]`, -etc. - -Each right-hand side `` can be any Zed expression. - -For any input value that is not a record, an error is emitted. - -Note that when the field references are all top level, -`put` is a special case of a `yield` with a -[record literal](../overview.md#6112-record-expressions) -using a spread operator of the form: -``` -yield {...this, : [, :...]} -``` - -### Examples - -_A simple put_ -```mdtest-command -echo '{a:1,b:2}' | zq -z 'put c:=3' - -``` -=> -```mdtest-output -{a:1,b:2,c:3} -``` -_The `put` keyword may be omitted_ -```mdtest-command -echo '{a:1,b:2}' | zq -z 'c:=3' - -``` -=> -```mdtest-output -{a:1,b:2,c:3} -``` -_A `put` operation can also be done with a record literal_ -```mdtest-command -echo '{a:1,b:2}' | zq -z 'yield {...this, c:3}' - -``` -=> -```mdtest-output -{a:1,b:2,c:3} -``` -_Missing fields show up as missing errors_ -```mdtest-command -echo '{a:1,b:2,c:3}' | zq -z 'put d:=e' - -``` -=> -```mdtest-output -{a:1,b:2,c:3,d:error("missing")} -``` -_Non-record input values generate errors_ -```mdtest-command -echo '{a:1} 1' | zq -z 'b:=2' - -``` -=> -```mdtest-output -{a:1,b:2} -error("put: not a record: 1") -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/rename.md b/versioned_docs/version-v1.1.0/language/operators/rename.md deleted file mode 100644 index f224f84ab..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/rename.md +++ /dev/null @@ -1,79 +0,0 @@ -### Operator - -  **rename** — change the name of record fields - -### Synopsis -``` -rename := [, := ...] -``` -### Description - -The `rename` operator changes the names of one or more fields -in the input records from the right-hand side name to the left-hand side name -for each assignment listed. When `` references a field that does not -exist, there is no effect and the input is copied to the output. - -Non-record inputs are copied to the output without modification. - -Each `` must be a field reference as a dotted path and the old name -and new name must refer to the same record in the case of nested records. -That is, the dotted path prefix before the final field name must be the -same on the left- and right-hand sides. To perform more sophisticated -renaming of fields, you can use cut/put or record literals. - -If a rename operation conflicts with an existing field name, then the -offending record is wrapped in a structured error along with an error message -and the error is emitted. - -### Examples - -_A simple rename_ -```mdtest-command -echo '{a:1,b:2}' | zq -z 'rename c:=b' - -``` -=> -```mdtest-output -{a:1,c:2} -``` -_Nested rename_ -```mdtest-command -echo '{a:1,r:{b:2,c:3}}' | zq -z 'rename r.a:=r.b' - -``` -=> -```mdtest-output -{a:1,r:{a:2,c:3}} -``` -_Trying to mutate records with rename produces a compile-time error_ -```mdtest-command fails -echo '{a:1,r:{b:2,c:3}}' | zq -z 'rename w:=r.b' - -``` -=> -```mdtest-output -cannot rename r.b to w -``` -_Record literals can be used instead of rename for mutation_ -```mdtest-command -echo '{a:1,r:{b:2,c:3}}' | zq -z 'yield {a,r:{c:r.c},w:r.b}' - -``` -=> -```mdtest-output -{a:1,r:{c:3},w:2} -``` -_Alternatively, mutations can be more generic and use drop_ -```mdtest-command -echo '{a:1,r:{b:2,c:3}}' | zq -z 'yield {a,r,w:r.b} | drop r.b' - -``` -=> -```mdtest-output -{a:1,r:{c:3},w:2} -``` -_Duplicate fields create structured errors_ -```mdtest-command -echo '{b:1} {a:1,b:1} {c:1}' | zq -z 'rename a:=b' - -``` -=> -```mdtest-output -{a:1} -error({message:"rename: duplicate field: \"a\"",on:{a:1,b:1}}) -{c:1} -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/sample.md b/versioned_docs/version-v1.1.0/language/operators/sample.md deleted file mode 100644 index 8d8576f79..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/sample.md +++ /dev/null @@ -1,44 +0,0 @@ -### Operator - -  **sample** — select one value of each shape - -### Synopsis -``` -sample [] -``` -### Description - -The `sample` operator is a syntactic shortcut for -``` -val:=any() by typeof() | yield val -``` -If `` is not provided, `this` is used. - -In other words, `sample` produces one value of each type in the input. -This is useful for data exploration when you want to see the shapes -of data and some sample data in a data set without having to sift -through it all to slice and dice it. - -### Examples - -_A simple sample_ -```mdtest-command -echo '1 2 3 "foo" "bar" 10.0.0.1 10.0.0.2' | zq -z 'sample | sort this' - -``` -=> -```mdtest-output -1 -10.0.0.1 -"foo" -``` - -_Sampling record shapes_ -```mdtest-command -echo '{a:1}{a:2}{s:"foo"}{s:"bar"}{a:3,s:"baz"}' | zq -z 'sample | sort a' - -``` -=> -```mdtest-output -{a:1} -{a:3,s:"baz"} -{s:"foo"} -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/search.md b/versioned_docs/version-v1.1.0/language/operators/search.md deleted file mode 100644 index 5b10ff5aa..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/search.md +++ /dev/null @@ -1,101 +0,0 @@ -### Operator - -  **search** — select values based on a search expression - -### Synopsis -``` -[search] -``` -### Description - -The `search` operator filters its input by applying a search expression `` -to each input value and dropping each value for which the expression evaluates -to `false` or to an error. - -The `search` keyword is optional since it is an -[implied operator](../overview.md#26-implied-operators). - -When Zed queries are run interactively, it is convenient to be able to omit -the "search" keyword, but when search filters appear in Zed source files, -it is good practice to include the optional keyword. - -### Examples - -_A simple keyword search for "world"_ -```mdtest-command -echo '"hello, world" "say hello" "goodbye, world"' | zq -z 'search world' - -``` -=> -```mdtest-output -"hello, world" -"goodbye, world" -``` -Search can utilize _arithmetic comparisons_ -```mdtest-command -echo '1 2 3' | zq -z 'search this >= 2' - -``` -=> -```mdtest-output -2 -3 -``` -_The "search" keyword may be dropped_ -```mdtest-command -echo '1 2 3' | zq -z '2 or 3' - -``` -=> -```mdtest-output -2 -3 -``` -_A search with Boolean logic_ -```mdtest-command -echo '1 2 3' | zq -z 'search this >= 2 AND this <= 2' - -``` -=> -```mdtest-output -2 -``` -_The AND operator may be omitted through predicate concatenation_ -```mdtest-command -echo '1 2 3' | zq -z 'search this >= 2 this <= 2' - -``` -=> -```mdtest-output -2 -``` -_Concatenation for keyword search_ -```mdtest-command -echo '"foo" "foo bar" "foo bar baz" "baz"' | zq -z 'foo bar' - -``` -=> -```mdtest-output -"foo bar" -"foo bar baz" -``` -_Search expressions match fields names too_ -```mdtest-command -echo '{foo:1} {bar:2} {foo:3}' | zq -z foo - -``` -=> -```mdtest-output -{foo:1} -{foo:3} -``` -_Boolean functions may be called_ -```mdtest-command -echo '1 "foo" 10.0.0.1' | zq -z 'search is()' - -``` -=> -```mdtest-output -1 -``` -_Boolean functions with Boolean logic_ -```mdtest-command -echo '1 "foo" 10.0.0.1' | zq -z 'search is() or is()' - -``` -=> -```mdtest-output -1 -10.0.0.1 -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/sort.md b/versioned_docs/version-v1.1.0/language/operators/sort.md deleted file mode 100644 index 43595c013..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/sort.md +++ /dev/null @@ -1,119 +0,0 @@ -### Operator - -  **sort** — sort values - -### Synopsis - -``` -sort [-r] [-nulls first|last] [ [, ...]] -``` -### Description - -The `sort` operator sorts its input by reading all values until the end of input, -sorting the values according to the provided sort expression(s), and emitting -the values in the sorted order. - -By default, the sort order is ascending, from lowest value to highest. If the `-r` -flag is provided, the sort order is descending. - -Zed follows the SQL convention that, by default, `null` values appear last -in either case of ascending or descending sort. This can be overridden -by specifying `-nulls first`. - -If not all data fits in memory, values are spilled to temporary storage -and sorted with an external merge sort. - -The sort expressions act as primary key, secondary key, and so forth. - -If no sort expression is provided, a sort key is guessed based on heuristics applied -to the values present. -The heuristic examines the first input record and finds the first field in -left-to-right order that is an integer, or if no integer field is found, -the first field that is floating point. If no such numeric field is found, `sort` finds -the first field in left-to-right order that is _not_ of the `time` data type. -Note that there are some cases (such as the output of a grouped aggregation performed on heterogeneous data) where the first input record to `sort` -may vary even when the same query is executed repeatedly against the same data. -If you require a query to show deterministic output on repeated execution, -an explicit field list must be provided. - -Note that a total order is defined over the space of all Zed values even -between values of different types so sort order is always well-defined even -when comparing heterogeneously typed values. - -> TBD: document the definition of the total order - -### Examples - -_A simple sort with a null_ -```mdtest-command -echo '2 null 1 3' | zq -z 'sort this' - -``` -=> -```mdtest-output -1 -2 -3 -null -``` -_With no sort expression, sort will sort by `this` for non-records_ -```mdtest-command -echo '2 null 1 3' | zq -z sort - -``` -=> -```mdtest-output -1 -2 -3 -null -``` -_The "nulls last" default may be overridden_ -```mdtest-command -echo '2 null 1 3' | zq -z 'sort -nulls first' - -``` -=> -```mdtest-output -null -1 -2 -3 -``` -_With no sort expression, sort will find a numeric key_ -```mdtest-command -echo '{s:"bar",k:2}{s:"bar",k:3}{s:"foo",k:1}' | zq -z sort - -``` -=> -```mdtest-output -{s:"foo",k:1} -{s:"bar",k:2} -{s:"bar",k:3} -``` -_It's best practice to provide the sort key_ -```mdtest-command -echo '{s:"bar",k:2}{s:"bar",k:3}{s:"foo",k:1}' | zq -z 'sort k' - -``` -=> -```mdtest-output -{s:"foo",k:1} -{s:"bar",k:2} -{s:"bar",k:3} -``` -_Sort with a secondary key_ -```mdtest-command -echo '{s:"bar",k:2}{s:"bar",k:3}{s:"foo",k:2}' | zq -z 'sort k,s' - -``` -=> -```mdtest-output -{s:"bar",k:2} -{s:"foo",k:2} -{s:"bar",k:3} -``` -_Sort with an expression_ -```mdtest-command -echo '{s:"sum 2",x:2,y:0}{s:"sum 3",x:1,y:2}{s:"sum 0",x:-1,y:-1}' | zq -z 'sort x+y' - -``` -=> -```mdtest-output -{s:"sum 0",x:-1,y:-1} -{s:"sum 2",x:2,y:0} -{s:"sum 3",x:1,y:2} -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/summarize.md b/versioned_docs/version-v1.1.0/language/operators/summarize.md deleted file mode 100644 index 4f5cc275c..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/summarize.md +++ /dev/null @@ -1,79 +0,0 @@ -### Operator - -  **summarize** — perform aggregations - -### Synopsis - -``` -[summarize] [:=] [where ][, [:=] [where ] ...] [by [][:=] ...] -``` -### Description - -The `summarize` operator consumes all of its input, applies an [aggregate function](../aggregates/README.md) -to each input value optionally organized with the group-by keys specified after -the `by` keyword, and at the end of input produces one or more aggregations -for each unique set of group-by key values. - -The `summarize` keyword is optional since it is an -[implied operator](../overview.md#26-implied-operators). - -Each aggregate function may be optionally followed by a `where` clause, which -applies a Boolean expression that indicates, for each input value, -whether to deliver it to that aggregate. (`where` clauses are analogous -to the [`where` operator](where.md).) - -The output field names for each aggregate and each key are optional. If omitted, -a field name is inferred from each right-hand side, e.g, the output field for the -[`count` aggregate function](../aggregates/count.md) is simply `count`. - -A key may be either an expression or a field. If the key field is omitted, -it is inferred from the expression, e.g., the field name for `by lower(s)` -is `lower`. - -If the cardinality of group-by keys causes the memory footprint to exceed -a limit, then each aggregate's partial results are spilled to temporary storage -and the results merged into final results using an external merge sort. -The same mechanism that spills to storage can also spill across the network -to a cluster of workers in an adaptive shuffle, though this is not yet implemented. - -### Examples - -Average the input sequence: -```mdtest-command -echo '1 2 3 4' | zq -z 'summarize avg(this)' - -``` -=> -```mdtest-output -{avg:2.5} -``` - -Sum the input sequence, leaving out the `summarize` keyword: -```mdtest-command -echo '1 2 3 4' | zq -z 'sum(this)' - -``` -=> -```mdtest-output -{sum:10} -``` - -Create integer sets by key and sort the output to get a deterministic order: -```mdtest-command -echo '{k:"foo",v:1}{k:"bar",v:2}{k:"foo",v:3}{k:"baz",v:4}' | zq -z 'set:=union(v) by key:=k' - | sort -``` -=> -```mdtest-output -{key:"bar",set:|[2]|} -{key:"baz",set:|[4]|} -{key:"foo",set:|[1,3]|} -``` - -Use a `where` clause: -```mdtest-command -echo '{k:"foo",v:1}{k:"bar",v:2}{k:"foo",v:3}{k:"baz",v:4}' | zq -z 'set:=union(v) where v > 1 by key:=k' - | sort -``` -=> -```mdtest-output -{key:"bar",set:|[2]|} -{key:"baz",set:|[4]|} -{key:"foo",set:|[3]|} -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/switch.md b/versioned_docs/version-v1.1.0/language/operators/switch.md deleted file mode 100644 index 38c8669e4..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/switch.md +++ /dev/null @@ -1,70 +0,0 @@ -### Operator - -  **switch** — route values based on cases - -### Synopsis - -``` -switch ( - case => - case => - ... - [ default => ] -) - -switch ( - case => - case => - ... - [ default => ] -) -``` -### Description - -The `switch` operator routes input values to multiple, parallel legs of -the dataflow path based on case matching. - -In this first form, the expression `` is evaluated for each input value -and its result is -compared with all of the case values, which must be distinct, compile-time constant -expressions. The value is propagated to the matching leg. - -In the second form, each case is evaluated for each input value -in the order that the cases appear. -The first case to match causes the input value to propagate to the corresponding leg. -Even if later cases match, only the first leg receives the value. - -In either form, if no case matches, but a default is present, -then the value is routed to the default leg. Otherwise, the value is dropped. - -Only one default case is allowed and it may appear anywhere in the list of cases; -where it appears does not influence the result. - -The output of a switch consists of multiple legs that must be merged. -If the downstream operator expects a single input, then the output legs are -merged with an automatically inserted [combine operator](combine.md). - -### Examples - -_Split input into evens and odds_ -```mdtest-command -echo '1 2 3 4' | zq -z 'switch ( case this%2==0 => {even:this} case this%2==1 => {odd:this}) | sort odd,even' - -``` -=> -```mdtest-output -{odd:1} -{odd:3} -{even:2} -{even:4} -``` -_Switch on `this` with a constant case_ -```mdtest-command -echo '1 2 3 4' | zq -z 'switch this ( case 1 => yield "1!" default => yield string(this) ) | sort' - -``` -=> -```mdtest-output -"1!" -"2" -"3" -"4" -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/tail.md b/versioned_docs/version-v1.1.0/language/operators/tail.md deleted file mode 100644 index 5a43b4184..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/tail.md +++ /dev/null @@ -1,34 +0,0 @@ -### Operator - -  **tail** — copy trailing values of input sequence - -### Synopsis - -``` -tail [ n ] -``` -### Description - -The `tail` operator copies the last `n` values from its input to its output -and ends the sequence thereafter. `n` must be an integer. - -### Examples - -_Grab last two values of arbitrary sequence_ -```mdtest-command -echo '1 "foo" [1,2,3]' | zq -z 'tail 2' - -``` -=> -```mdtest-output -"foo" -[1,2,3] -``` - -_Grab the last record of a record sequence_ -```mdtest-command -echo '{a:"hello"}{b:"world"}' | zq -z tail - -``` -=> -```mdtest-output -{b:"world"} -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/uniq.md b/versioned_docs/version-v1.1.0/language/operators/uniq.md deleted file mode 100644 index 1b4715b73..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/uniq.md +++ /dev/null @@ -1,57 +0,0 @@ -### Operator - -  **uniq** — deduplicate adjacent values - -### Synopsis - -``` -uniq [-c] -``` -### Description - -Inspired by the traditional Unix shell command of the same name, -the `uniq` operator copies its input to its output but removes duplicate values -that are adjacent to one another. - -This operator is most often used with `cut` and `sort` to find and eliminate -duplicate values. - -When run with the `-c` option, each value is output as a record with the -type signature `{value:any,count:uint64}`, where the `value` field contains the -unique value and the `count` field indicates the number of consecutive duplicates -that occurred in the input for that output value. - -### Examples - -_Simple deduplication_ -```mdtest-command -echo '1 2 2 3' | zq -z uniq - -``` -=> -```mdtest-output -1 -2 -3 -``` - -_Simple deduplication with -c_ -```mdtest-command -echo '1 2 2 3' | zq -z 'uniq -c' - -``` -=> -```mdtest-output -{value:1,count:1(uint64)} -{value:2,count:2(uint64)} -{value:3,count:1(uint64)} -``` -_Use sort to deduplicate non-adjacent values_ -```mdtest-command -echo '"hello" "world" "goodbye" "world" "hello" "again"' | zq -z 'sort | uniq' - -``` -=> -```mdtest-output -"again" -"goodbye" -"hello" -"world" -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/where.md b/versioned_docs/version-v1.1.0/language/operators/where.md deleted file mode 100644 index ad0eea5ad..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/where.md +++ /dev/null @@ -1,79 +0,0 @@ -### Operator - -  **where** — select values based on a Boolean expression - -### Synopsis -``` -[where] -``` -### Description - -The `where` operator filters its input by applying a Boolean expression `` -to each input value and dropping each value for which the expression evaluates -to `false` or to an error. - -The `where` keyword is optional since it is an -[implied operator](../overview.md#26-implied-operators). - -The "where" keyword requires a regular Zed expression and does not support -[search expressions](../overview.md#7-search-expressions). Use the -[search operator](search.md) if you want search syntax. - -When Zed queries are run interactively, it is highly convenient to be able to omit -the "where" keyword, but when where filters appear in Zed source files, -it is good practice to include the optional keyword. - -### Examples - -_An arithmetic comparison_ -```mdtest-command -echo '1 2 3' | zq -z 'where this >= 2' - -``` -=> -```mdtest-output -2 -3 -``` -_The "where" keyword may be dropped_ -```mdtest-command -echo '1 2 3' | zq -z 'this >= 2' - -``` -=> -```mdtest-output -2 -3 -``` -_A filter with Boolean logic_ -```mdtest-command -echo '1 2 3' | zq -z 'where this >= 2 AND this <= 2' - -``` -=> -```mdtest-output -2 -``` -_A filter with array containment logic_ -```mdtest-command -echo '1 2 3 4' | zq -z 'where this in [1,4]' - -``` -=> -```mdtest-output -1 -4 -``` -_Boolean functions may be called_ -```mdtest-command -echo '1 "foo" 10.0.0.1' | zq -z 'where is()' - -``` -=> -```mdtest-output -1 -``` -_Boolean functions with Boolean logic_ -```mdtest-command -echo '1 "foo" 10.0.0.1' | zq -z 'where is() or is()' - -``` -=> -```mdtest-output -1 -10.0.0.1 -``` diff --git a/versioned_docs/version-v1.1.0/language/operators/yield.md b/versioned_docs/version-v1.1.0/language/operators/yield.md deleted file mode 100644 index 8a2c21228..000000000 --- a/versioned_docs/version-v1.1.0/language/operators/yield.md +++ /dev/null @@ -1,60 +0,0 @@ -### Operator - -  **yield** — emit values from expressions - -### Synopsis - -``` -[yield] [, ...] -``` -### Description - -The `yield` operator produces output values by evaluating one or more -expressions on each input value and sending each result to the output -in left-to-right order. Each `` may be any valid -[Zed expression](../overview.md#6-expressions). - -The `yield` keyword is optional since it is an -[implied operator](../overview.md#26-implied-operators). - -### Examples - -_Hello, world_ -```mdtest-command -echo null | zq -z 'yield "hello, world"' - -``` -=> -```mdtest-output -"hello, world" -``` -_Yield evaluates each expression for every input value_ -```mdtest-command -echo 'null null null' | zq -z 'yield 1,2' - -``` -=> -```mdtest-output -1 -2 -1 -2 -1 -2 -``` -_Yield typically operates on its input_ -```mdtest-command -echo '1 2 3' | zq -z 'yield this*2+1' - -``` -=> -```mdtest-output -3 -5 -7 -``` -_Yield is often used to transform records_ -```mdtest-command -echo '{a:1,b:2}{a:3,b:4}' | zq -z 'yield [a,b],[b,a] | collect(this) | yield collect' - -``` -=> -```mdtest-output -[[1,2],[2,1],[3,4],[4,3]] -``` diff --git a/versioned_docs/version-v1.1.0/language/overview.md b/versioned_docs/version-v1.1.0/language/overview.md deleted file mode 100644 index 23d4a5aa1..000000000 --- a/versioned_docs/version-v1.1.0/language/overview.md +++ /dev/null @@ -1,2085 +0,0 @@ ---- -sidebar_position: 1 -sidebar_label: Overview ---- - -# Zed Language Overview - -## 1. Introduction - -The Zed language is a query language for search, analytics, -and transformation inspired by the -[pipeline pattern](https://en.wikipedia.org/wiki/Tacit_programming) -of the traditional Unix shell. -Like a Unix pipeline, a query is expressed as a data source followed -by a number of commands: -``` -command | command | command | ... -``` -However, in Zed, the entities that transform data are called -"operators" instead of "commands" and unlike Unix pipelines, -the streams of data in a Zed query -are typed data sequences that adhere to the -[Zed data model](../formats/zed.md). -Moreover, Zed sequences can be forked and joined: -``` -operator -| operator -| fork ( - => operator | ... - => operator | ... -) -| join | ... -``` -Here, Zed programs can include multiple data sources and splitting operations -where multiple paths run in parallel and paths can be combined (in an -undefined order), merged (in a defined order) by one or more sort keys, -or joined using relational-style join logic. - -Generally speaking, a [flow graph](https://en.wikipedia.org/wiki/Directed_acyclic_graph) -defines a directed acyclic graph (DAG) composed -of data sources and operator nodes. The Zed syntax leverages "fat arrows", -i.e., `=>`, to indicate the start of a parallel legs of the data flow. - -That said, the Zed language is -[declarative](https://en.wikipedia.org/wiki/Declarative_programming) -and the Zed compiler optimizes the data flow computation -— e.g., often implementing a Zed program differently than -the flow implied by the pipeline yet reaching the same result — -much as a modern SQL engine optimizes a declarative SQL query. - -Zed is also intended to provide a seamless transition from a simple search experience -(e.g., typed into a search bar or as the query argument of the `zq` command-line -tool) to more a complex analytics experience composed of complex joins and aggregations -where the Zed language source text would typically be authored in a editor and -managed under source-code control. - -Like an email or Web search, a simple keyword search is just the word itself, -e.g., -``` -example.com -``` -is a search for the string "example.com" and -``` -example.com urgent -``` -is a search for values with the both strings "example.com" and "urgent" present. - -Unlike typical log search systems, the Zed language operators are uniform: -you can specify an operator including keyword search terms, Boolean predicates, -etc. using the same syntax at any point in the pipeline as -[described below](#7-search-expressions) - -For example, -the predicate `message_length > 100` can simply be tacked onto the keyword search -from above, e.g., -``` -example.com urgent message_length > 100 -``` -finds all values containing the string "example.com" and "urgent" somewhere in them -provided further that the field `message_length` is a numeric value greater than 100. -A related query that performs an aggregation could be more formally -written as follows: -``` -search "example.com" AND "urgent" -| where message_length > 100 -| summarize kinds:=union(type) by net:=network_of(srcip) -``` -which computes an aggregation table of different message types (e.g., -from a hypothetical field called `type`) into a new, aggregated field -called `kinds` and grouped by the network of all the source IP address -in the input -(e.g., from a hypothetical field called `srcip`) as a derived field called `net`. - -The short-hand query from above might be typed into a search box while the -latter query might be composed in a query editor or in Zed source files -maintained in GitHub. Both forms are valid Zed queries. - -To further ease the maintenance and readability of source files, comments -beginning with `//` may appear in Zed. - -``` -// Copyright (C) 2023 Fictional Corp Ultd. - All Rights Reserved - -search "example.com" AND "urgent" -| where message_length > 100 // We only care about long messages -| summarize kinds:=union(type) by net:=network_of(srcip) -``` - -## 2. The Dataflow Model - -In Zed, each operator takes its input from the output of its upstream operator beginning -either with a data source or with an implied source. - -All available operators are listed on the [reference page](operators/README.md). - -### 2.1 Dataflow Sources - -In addition to the data sources specified as files on the `zq` command line, -a source may also be specified with the [from operator](operators/from.md#operator). - -When running on the command-line, `from` may refer to a file, to an HTTP -endpoint, or to an S3 URI. When running in a data lake, `from` typically -refers to a collection of data called a "data pool" and is referenced using -the pool's name much as SQL references database tables by their name. - -For more detail, see the reference page of the [from operator](operators/from.md#operator), -but as an example, you might use the `get` form of `from` to fetch data from an -HTTP endpoint and process it with Zed, in this case, to extract the description -and license of a GitHub repository: -``` -zq -f text "get https://api.github.com/repos/brimdata/zed | yield description,license.name" -``` -When a Zed query is run on the command-line with `zq`, the `from` source is -typically omitted and implied instead by the command-line file arguments. -The input may be stdin via `-` as in -``` -echo '"hello, world"' | zq - -``` -The examples throughout the language documentation use this "echo pattern" -to standard input of `zq -` to illustrate language semantics. -Note that in these examples, the input values are expressed as Zed values serialized -in the [ZSON text format](../formats/zson.md) -and the `zq` query text expressed as the first argument of the `zq` command -is expressed in the syntax of the Zed language described here. - -### 2.2 Dataflow Operators - -Each operator is identified by name and performs a specific operation -on a stream of records. - -Some operators, like -[summarize](operators/summarize.md#operator) or -[sort](operators/sort.md#operator), -read all of their input before producing output though -`summarize` can produce incremental results when the group-by key is -aligned with the order of the input. - -For large queries that process all of their input, time may pass before -seeing any output. - -On the other hand, most operators produce incremental output by operating -on values as they are produced. For example, a long running query that -produces incremental output will stream results as they are produced, i.e., -running `zq` to standard output will display results incrementally. - -The `search` and `where` operators "find" values in their input and drop -the ones that do not match what is being looked for. - -The [yield operator](operators/yield.md#operator) emits one or more output values -for each input value based on arbitrary [expressions](#6-expressions), -providing a convenient means to derive arbitrary output values as a function -of each input value, much like the map concept in the MapReduce framework. - -The [fork operator](operators/fork.md#operator) copies its input to parallel -legs of a query. The output of these parallel paths can be combined -in a number of ways: -* merged in sorted order using the [merge operator](operators/merge.md#operator), -* joined using the [join operator](operators/join.md#operator), or -* combined in an undefined order using the implied [combine operator](operators/combine.md#operator). - -A path can also be split to multiple query legs using the -[switch operator](operators/switch.md#operator), in which data is routed to only one -corresponding leg (or dropped) based on the switch clauses. - -Switch operators typically -involve multiline Zed programs, which are easiest to edit in a file. For example, -suppose this text is in a file called `switch.zed`: -```mdtest-input switch.zed -switch this ( - case 1 => yield {val:this,message:"one"} - case 2 => yield {val:this,message:"two"} - default => yield {val:this,message:"many"} -) | merge val -``` -Then, running `zq` with `-I switch.zed` like so: -```mdtest-command -echo '1 2 3 4' | zq -z -I switch.zed - -``` -produces -```mdtest-output -{val:1,message:"one"} -{val:2,message:"two"} -{val:3,message:"many"} -{val:4,message:"many"} -``` -Note that the output order of the switch legs is undefined (indeed they run -in parallel on multiple threads). To establish a consistent sequence order, -a [merge operator](operators/merge.md) -may be applied at the output of the switch specifying a sort key upon which -to order the upstream data. Often such order does not matter (e.g., when the output -of the switch hits an aggregator), in which case it is typically more performant -to omit the merge (though the Zed system will often delete such unnecessary -operations automatically as part optimizing queries when they are compiled). - -If no `merge` or `join` is indicated downstream of a `fork` or `switch`, -then the implied `combine` operator is presumed. In this case, values are -forwarded from the switch to the downstream operator in an undefined order. - -### 2.3 The Special Value `this` - -In Zed, there are no looping constructs and variables are limited to binding -values between [lateral scopes](#81-lateral-scope) as described below. -Instead, the input sequence -to an operator is produced continuously and any output values are derived -from input values. - -In contrast to SQL, where a query may refer to input tables by name, -there are no explicit tables and a Zed operator instead refers -to its input values using the special identifier `this`. - -For example, sorting the following input -```mdtest-command -echo '"foo" "bar" "BAZ"' | zq -z sort - -``` -produces this case-sensitive output: -```mdtest-output -"BAZ" -"bar" -"foo" -``` -But we can make the sort case-insensitive by applying a function to the -inputs values with the expression `lower(this)`, which converts -each value to lower-case for use in in the sort without actually modifying -the input value, e.g., -``` -echo '"foo" "bar" "BAZ"' | zq -z 'sort lower(this)' - -``` -produces -``` -"bar" -"BAZ" -"foo" -``` - -### 2.4 Implied Field References - -A common use case for Zed is to process sequences of record-oriented data -(e.g., arising from formats like JSON or Avro) in the form of events -or structured logs. In this case, the input values to the operators -are Zed "records" and the fields of a record are referenced with the dot operator. - -For example, if the input above were a sequence of records instead of strings -and perhaps contained a second field, e.g., -``` -{s:"foo",x:1} -{s:"bar",x:2} -{s:"BAZ",x:3} -``` -Then we could refer to the field `s` using `this.s` and sort the records -as above with `sort this.s`, which would give -``` -{s:"BAZ",x:3} -{s:"bar",x:2} -{s:"foo",x:1} -``` -This pattern is so common that field references to `this` may be shortened -by simply referring to the field by name wherever a Zed expression is expected, -e.g., -``` -sort s -``` -is shorthand for `sort this.s` - -### 2.5 Field Assignments - -A typical operation in records involves -adding or changing the fields of a record using the [put operator](operators/put.md#operator) -or extracting a subset of fields using the [cut operator](operators/cut.md#operator). -Also, when aggregating data using group-by keys, the group-by assignments -create new named record fields. - -In all of these cases, the Zed language uses the token `:=` to denote -field assignment. For example, -``` -put x:=y+1 -``` -or -``` -summarize salary:=sum(income) by address:=lower(address) -``` -This style of "assignment" to a record value is distinguished from the `=` -token which binds a locally scoped name to a value that can be referenced -in later expressions. - -### 2.6 Implied Operators - -When Zed is run in an application like [Brim](https://github.com/brimdata/brim), -queries are often composed interactively in a "search bar" experience. -The language design here attempts to support both this "lean forward" pattern of usage -along with a "coding style" of query writing where the queries might be large -and complex, e.g., to perform transformations in a data pipeline, where -the Zed queries are stored under source-code control perhaps in GitHub or -in Brim's query library. - -To facilitate both a programming-like model as well as an ad hoc search -experience, Zed has a canonical, long form that can be abbreviated -using syntax that supports an agile, interactive query workflow. -To this end, Zed allows certain operator names to be optionally omitted when -they can be inferred from context. For example, the expression following -the `summarize` operator -``` -summarize count() by id -``` -is unambiguously an aggregation and can be shortened to -``` -count() by id -``` -Likewise, a very common lean-forward use pattern is "searching" so by default, -expressions are interpreted as keyword searches, e.g., -``` -search foo bar or x > 100 -``` -is abbreviated -``` -foo bar or x > 100 -``` -Furthermore, if an operator-free expression is not valid syntax for -a search expression but is a valid [Zed expression](#6-expressions), -then the abbreviation is treated as having an implied `yield` operator, e.g., -``` -{s:lower(s)} -``` -is shorthand for -``` -yield {s:lower(s)} -``` -When operator names are omitted, `search` has precedence over `yield`, so -``` -foo -``` -is interpreted as a search for the string "foo" rather than a yield of -the implied record field named `foo`. - -Another common query pattern involves adding or mutating fields of records -where the input is presumed to be a sequence of records. -The [put operator](operators/put.md#operator) provides this mechanism and the `put` -keyword is implied by the mutator syntax `:=`, which is used in Zed when an -input record field is modified, as compared to `=` which is used in constant -and variable assignments. For example, the operation -``` -put y:=2*x+1 -``` -can be expressed simply as -``` -y:=2*x+1 -``` -When composing long-form queries that are shared via Brim or managed in GitHub, -it is best practice to include all operator names in the Zed source text. - -In summary, if no operator name is given, the implied operator is determined -from the operator-less source text, in the order given, as follows: -* If the text can be interpreted as a search expression, then the operator is `search`. -* If the text can be interpreted as a boolean expression, then the operator is `where`. -* If the text can be interpreted as one or more field assignments, then the operator is `put`. -* If the text can be interpreted as an aggregation, then the operator is `summarize`. -* If the text can be interpreted as an expression, then the operator is `yield`. -* Otherwise, the text causes a compile-time error. - -When in doubt, you can always check what the compiler is doing under the hood -by running `zq` with the `-C` flag to print the parsed query in "canonical form", e.g., -```mdtest-command -zq -C foo -zq -C 'is()' -zq -C 'count()' -zq -C '{a:x+1,b:y-1}' -zq -C 'a:=x+1,b:=y-1' -``` -produces -```mdtest-output -search foo -where is() -summarize - count() -yield {a:x+1,b:y-1} -put a:=x+1,b:=y-1 -``` - -## 3. Const Statements - -Constants may be defined and assigned to a symbolic name with the syntax -``` -const = -``` -where `` is an identifier and `` is a constant [expression](#6-expressions) -that must evaluate to a constant and at compile time and not reference any -runtime state like `this`, e.g., -```mdtest-command -echo '{r:5}{r:10}' | zq -z "const PI=3.14159 2*PI*r" - -``` -produces -```mdtest-output -31.4159 -62.8318 -``` - -One or more const statements may appear only at the beginning of a scope -(i.e., the main scope at the start of a Zed program or a [lateral scope](#81-lateral-scope) -defined by an [over operator](operators/over.md#operator)) -and binds the identifier to the value in the scope in which it appears in addition -to any contained scopes. - -A const statement cannot redefine an identifier that was previously defined in the same -scope but can override identifiers defined in ancestor scopes. - -Const statements may appear intermixed with type statements. - -## 4. Type Statements - -Named types may be created with the syntax -``` -type = -``` -where `` is an identifier and `` or a [Zed type](#51-first-class-types). -This create a new type with the given name in the Zed type system, e.g., -```mdtest-command -echo 80 | zq -z 'type port=uint16 cast(this, )' - -``` -produces -```mdtest-output -80(port=uint16) -``` - -One or more type statements may appear at the beginning of a scope -(i.e., the main scope at the start of a Zed program or a [lateral scope](#81-lateral-scope) -defined by an [over operator](operators/over.md#operator)) -and binds the identifier to the type in the scope in which it appears in addition -to any contained scopes. - -A type statement cannot redefine an identifier that was previously defined in the same -scope but can override identifiers defined in ancestor scopes. - -Type statements may appear intermixed with const statements. - -## 5. Data Types - -The Zed language includes most data types of a typical programming language -as defined in the [Zed data model](../formats/zed.md). - -The syntax of individual literal values generally follows -the [ZSON syntax](../formats/zson.md) with the exception that -[type decorators](../formats/zson.md#22-type-decorators) -are not included in the language. Instead, a -[type cast](#614-casts) may be used in any expression for explicit -type conversion. - -In particular, the syntax of primitive types follows the -[primitive-value definitions](../formats/zson.md#23-primitive-values) in ZSON -as well as the various [complex value definitions](../formats/zson.md#24-complex-values) -like records, arrays, sets, and so forth. However, complex values are not limited to -constant values like ZSON and can be composed from literal expressions as -[defined below](#611-literals). - -### 5.1 First-class Types - -Like the Zed data model, the Zed language has first class types: -any Zed type may be used as a value. - -The primitive types are listed in the -[data model specification](../formats/zed.md#1-primitive-types) -and have the same syntax in the Zed language. Complex types also follow -the ZSON syntax. Note that the type of a type value is simply `type`. - -As in ZSON, _when types are used as values_, e.g., in a Zed expression, -they must be referenced within angle brackets. That is, the integer type -`int64` is expressed as a type value using the syntax ``. - -Complex types in the Zed language follow the ZSON syntax as well. Here are -a few examples: -* a simple record type - `{x:int64,y:int64}` -* an array of integers - `[int64]` -* a set of strings - `|[string]|` -* a map of strings keys to integer values - `{[string,int64]}` -* a union of string and integer - `(string,int64)` - -Complex types may be composed, as in `[({s:string},{x:int64})]` which is -an array of type union of two types of records. - -The [typeof function](functions/typeof.md) returns a value's type as -a value, e.g., `typeof(1)` is `` and `typeof()` is ``. - -First-class types are quite powerful because types can -serve as group-by keys or be used in "data shaping" logic. -A common query for data introspection is to perform some search query -slicing and dicing some exploratory data then counting the shapes of -each type of data as follows: -``` -search ... | count() by typeof(this) -``` -For example, -```mdtest-command -echo '1 2 "foo" 10.0.0.1 ' | zq -z 'count() by typeof(this) | sort this' - -``` -produces -```mdtest-output -{typeof:,count:2(uint64)} -{typeof:,count:1(uint64)} -{typeof:,count:1(uint64)} -{typeof:,count:1(uint64)} -``` -When running such a query over complex, semi-structured data, the results can -be quite illuminating and can inform the design of "data shaping" Zed queries -to transform raw, messy data into clean data for downstream tooling. - -Note the somewhat subtle difference between a record value with a field `t` of -type `type` whose value is type `string` -``` -{t:} -``` -and a record type used as a value -``` -<{t:string}> -``` - -### 5.2 Named Types - -As in any modern programming language, types can be named and the type names -persist into the data model and thus into the serialized input and output. - -Named types may be defined in three ways: -* with a [type statement as described above](#4-type-statements), -* with a definition inside of another type, or -* by the input data itself. - -Type names that are embedded in another type have the form -``` -name=type -``` -and create a binding between the indicated string `name` and the specified `type`. -For example, -``` -type socket = {addr:ip,port:port=uint16} -``` -defines a named type `socket` that is a record with field `addr` of type `ip` -and field `port` of type "port", where type "port" is a named type for type `uint16` . - -Named types may also be defined by the input data itself, as Zed data is -comprehensively self describing. -When named types are defined in the input data, there is no need to declare their -type in a query. -In this case, a Zed expression may refer to the type by name that simply -appears to the runtime as a side effect of operating upon the data. If the type -name referred to this way does not exist, then the type value reference -results in `error("missing")`. For example, -```mdtest-command -echo '1(=foo) 2(=bar) 3(=foo)' | zq -z 'typeof(this)==' - -``` -results in -```mdtest-output -1(=foo) -3(=foo) -``` -and -```mdtest-command -echo '1(=foo)' | zq -z 'yield ' - -``` -results in -```mdtest-output - -``` -but -```mdtest-command -zq -z 'yield ' -``` -gives -```mdtest-output -error("missing") -``` -Each instance of a named type definition overrides any earlier definition. -In this way, types are local in scope. - -Each value that references a named type retains its local definition of the -named type retaining the proper type binding while accommodating changes in a -particular named type. For example, -```mdtest-command -echo '1(=foo) 2(=bar) "hello"(=foo) 3(=foo)' | zq -z 'count() by typeof(this) | sort this' - -``` -results in -```mdtest-output -{typeof:,count:1(uint64)} -{typeof:,count:2(uint64)} -{typeof:,count:1(uint64)} -``` -Here, the two versions of type "foo" are retained in the group-by results. - -In general, it is bad practice to define multiple versions a single named type -though the Zed system and Zed data model accommodate such dynamic bindings. -Managing and enforcing the relationship between type names and their type definitions -on a global basis (e.g., across many different data pools in a Zed lake) is outside -the scope of the Zed data model and language. That said, Zed provides flexible -building blocks so systems can define their own schema versioning and schema -management policies on top of these Zed primitives. - -Zed's super-structured data model is a superset of relational tables and -the Zed language's type system can easily make this connection. -As an example, consider this type definition for "employee": -``` -type employee = {id:int64,first:string,last:string,job:string,salary:float64} -``` -In SQL, you might find the top five salaries by last name with -``` -SELECT last,salary -FROM employee -ORDER BY salary -LIMIT 5 -``` -In Zed, you would say -``` -from anywhere | typeof(this)== | cut last,salary | sort salary | head 5 -``` -and since type comparisons are so useful and common, the function [is](functions/is.md) -can be used to perform the type match: -``` -from anywhere | is() | cut last,salary | sort salary | head 5 -``` -The power of Zed is that you can interpret data on the fly as belonging to -a certain schemas, in this case "employee", and those records can be intermixed -with other relevant data. There is no need to create a table called "employee" -and put the data into the table before that data can be queried as an "employee". -And if the schema or type name for "employee" changes, queries still continue -to work. - -### 5.3 First-class Errors - -As with types, errors in Zed are first-class: any value can be transformed -into an error by wrapping it in the Zed [error type](../formats/zed.md#27-error). - -In general, expressions and functions that result in errors simply return -a value of type error as a result. This encourages a powerful flow-style -of error handling where errors simply propagate from one operation to the -next and land in the output alongside non-error values to provide a very helpful -context and rich information for tracking down the source of errors. There is -no need to check for error conditions everywhere or look through auxiliary -logs to find out what happened. - -For example, -input values can be transformed to errors as follows: -```mdtest-command -echo '0 "foo" 10.0.0.1' | zq -z 'error(this)' - -``` -produces -```mdtest-output -error(0) -error("foo") -error(10.0.0.1) -``` -More practically, errors from the runtime show up as error values. -For example, -```mdtest-command -echo 0 | zq -z '1/this' - -``` -produces -```mdtest-output -error("divide by zero") -``` -And since errors are first-class and just values, they have a type. -In particular, they are a complex type where the error value's type is the -complex type error containing the type of the value. For example, -```mdtest-command -echo 0 | zq -z 'typeof(1/this)' - -``` -produces -```mdtest-output - -``` -First-class errors are particularly useful for creating structured errors. -When a Zed query encounters a problematic condition, -instead of silently dropping the problematic error -and logging an error obscurely into some hard-to-find system log as so many -ETL pipelines do, the Zed logic can -preferably wrap the offending value as an error and propagate it to its output. - -For example, suppose a bad value shows up: -``` -{kind:"bad", stuff:{foo:1,bar:2}} -``` -A Zed shaper could catch the bad value (e.g., as a default case in a -switch topology) and propagate it as an error using the Zed expression: -``` -yield error({message:"unrecognized input",input:this}) -``` -then such errors could be detected and searched for downstream with the -[is_error function](functions/is_error.md). -For example, -``` -is_error(this) -``` -on the wrapped error from above produces -``` -error({message:"unrecognized input",input:{kind:"bad", stuff:{foo:1,bar:2}}}) -``` -There is no need to create special tables in a complex warehouse-style ETL -to land such errors as they can simply land next to the output values themselves. - -And when transformations cascade one into the next as different stages of -an ETL pipeline, errors can be wrapped one by one forming a "stack trace" -or lineage of where the error started and what stages it traversed before -landing at the final output stage. - -Errors will unfortunately and inevitably occur even in production, -but having a first-class data type to manage them all while allowing them to -peacefully coexist with valid production data is a novel and -useful approach that Zed enables. - -#### 5.3.1 Missing and Quiet - -Zed's heterogeneous data model allows for queries -that operate over different types of data whose structure and type -may not be known ahead of time, e.g., different -types of records with different field names and varying structure. -Thus, a reference to a field, e.g., `this.x` may be valid for some values -that include a field called `x` but not valid for those that do not. - -What is the value of `x` when the field `x` does not exist? - -A similar question faced SQL when it was adapted in various different forms -to operate on semi-structured data like JSON or XML. SQL already had the `NULL` value -so perhaps a reference to a missing value could simply be `NULL`. - -But JSON also has `null`, so a reference to `x` in the JSON value -``` -{"x":null} -``` -and a reference to `x` in the JSON value -``` -{} -``` -would have the same value of `NULL`. Furthermore, an expression like `x==NULL` -could not differentiate between these two cases. - -To solve this problem, the `MISSING` value was proposed to represent the value that -results from accessing a field that is not present. Thus, `x==NULL` and -`x==MISSING` could disambiguate the two cases above. - -Zed, instead, recognizes that the SQL value is `MISSING` is a paradox: -I'm here but I'm not. - -In reality, a MISSING value is not a value. It's an error condition -that resulted from trying to reference something that didn't exist. - -So why should we pretend that this is a bona fide value? SQL adopted this -approach because it lacks first-class errors. - -But Zed has first-class errors so -a reference to something that does not exist is an error of type -`error` whose value is `error("missing")`. For example, -```mdtest-command -echo "{x:1} {y:2}" | zq -z 'yield x' - -``` -produces -```mdtest-output -1 -error("missing") -``` -Sometimes you want missing errors to show up and sometimes you don't. -The [quiet function](functions/quiet.md) transforms missing errors into -"quiet errors". A quiet error is the value `error("quiet")` and is ignored -by most operators, in particular yield. For example, -```mdtest-command -echo "{x:1} {y:2}" | zq -z "yield quiet(x)" - -``` -produces -```mdtest-output -1 -``` - -## 6. Expressions - -Zed expressions follow the typical patterns in programming languages. -Expressions are typically used within data flow operators -to perform computation on input values and are typically evaluated once per each -input value `this`. - -For example, `yield`, `where`, `cut`, `put`, `sort` and so forth all take -various expressions as part of their operation. - -### 6.1 Arithmetic - -Arithmetic operations (`*`, `/`, `%`, `+`, `-`) follow customary syntax -and semantics and are left-associative with multiplication and division having -precedence over addition and subtraction. `%` is the modulo operator. - -For example, -```mdtest-command -zq -z 'yield 2*3+1, 11%5, 1/0, "foo"+"bar"' -``` -produces -```mdtest-output -7 -1 -error("divide by zero") -"foobar" -``` - -### 6.2 Comparisons - -Comparison operations (`<`, `<=`, `==`, `!=`, `>`, `>=`) follow customary syntax -and semantics and result in a truth value of type `bool` or an error. -A comparison expression is any valid Zed expression compared to any other -valid Zed expression using a comparison operator. - -When the operands are coercible to like types, the result is the truth value -of the comparison. Otherwise, the result is `false`. - -If either operand to a comparison -is `error("missing")`, then the result is `error("missing")`. - -For example, -```mdtest-command -zq -z 'yield 1 > 2, 1 < 2, "b" > "a", 1 > "a", 1 > x' - -``` -produces -```mdtest-output -false -true -true -false -error("missing") -``` - -### 6.3 Containment - -The `in` operator has the form -``` - in -``` -and is true if the `` expression results in a value that -appears somewhere in the `` as an exact match of the item. -The right-hand side value can be any Zed value and complex values are -recursively traversed to determine if the item is present anywhere within them. - -For example, -```mdtest-command -echo '{a:[1,2]}{b:{c:3}}{d:{e:1}}' | zq -z '1 in this' - -``` -produces -```mdtest-output -{a:[1,2]} -{d:{e:1}} -``` -You can also use this operator with a static array: -```mdtest-command -echo '{accounts:[{id:1},{id:2},{id:3}]}' | zq -z 'over accounts | where id in [1,2]' - -``` -produces -```mdtest-output -{id:1} -{id:2} -``` - -### 6.4 Logic - -The keywords `and`, `or`, and `not` perform logic on operands of type `bool`. -The binary operators `and` and `or` operate on Boolean values and result in -an error value if either operand is not a Boolean. Likewise, `not` operates -on its unary operand and results in an error if its operand is not type `bool`. -Unlike many other languages, non-Boolean values are not automatically converted to -Boolean type using "truthiness" heuristics. - -### 6.5 Field Dereference - -Records fields are dereferenced with the dot operator `.` as is customary -in other languages and have the form -``` - . -``` -where `` is an identifier representing the field name referenced. -If a field name is not representable as an identifier, then [indexing](#66-indexing) -may be used with a quoted string to represent any valid field name. -Such field names can be accessed using `this` and an array-style -reference, e.g., `this["field with spaces"]`. - -If the dot operator is applied to a value that is not a record -or if the record does not have the given field, then the result is -`error("missing")`. - -### 6.6 Indexing - -The index operation can be applied to various data types and has the form: -``` - [ ] -``` -If the `` expression is a record, then the `` operand -must be coercible to a string and the result of the record's field -of that name. - -If the `` expression is an array, then the `` operand -must be coercible to an integer and the result is the -value in the array of that index. - -If the `` expression is a set, then the `` operand -must be coercible to an integer and the result is the -value in the set of that index ordered by total order of Zed values. - -If the `` expression is a map, then the `` operand -is presumed to be a key and the corresponding value for that key is -the result of the operation. If no such key exists in the map, then -`error("missing")` results. - -If the `` expression is a string, then the `` operand -must be coercible to an integer and the result is an integer representing -the unicode code point at that offset in the string. - -If the `` expression is type bytes, then the `` operand -must be coercible to an integer and the result is an unsigned 8-bit integer -representing the byte value at that offset in the bytes sequence. - -### 6.7 Slices - -The slice operation can be applied to various data types and has the form: -``` - [ : ] -``` -The `` and `` terms must be expressions that are coercible -to integer and represent a range of index values to form a subset of elements -from the `` term provided. The range begins at the `` position -and ends one before the `` position. A negative -value of `` or `` represents a position relative to the -end of the value being sliced. - -If the `` expression is an array, then the result is an array of -elements comprising the indicated range. - -If the `` expression is a set, then the result is a set of -elements comprising the indicated range ordered by total order of Zed values. - -If the `` expression is a string, then the result is a substring -consisting of unicode code points comprising the given range. - -If the `` expression is type bytes, then the result is a bytes sequence -consisting of bytes comprising the given range. - -### 6.8 Conditional - -A conditional expression has the form -``` - ? : ` -``` -The `` expression is evaluated and must have a result of type `bool`. -If not, an error results. - -If the result is true, then the first `` expression is evaluated and becomes -the result. Otherwise, the second `` expression is evaluated. - -Note that if the expression has side effects, -as with [aggregate function calls](#610-aggregate-function-calls), only the selected expression -will be evaluated. - -For example, -```mdtest-command -echo '{s:"foo",v:1}{s:"bar",v:2}' | zq -z 'yield (s=="foo") ? v : -v' - -``` -produces -```mdtest-output -1 --2 -``` - -### 6.9 Function Calls - -Functions perform stateless transformations of their input value to their -return value and utilize call-by value semantics with positional and unnamed -arguments. Some functions take a variable number of arguments. - -> The only available functions are built-in but user-defined functions and -> library package management will be added to the Zed language soon. - -For example, -```mdtest-command -zq -z 'yield pow(2,3), lower("ABC")+upper("def"), typeof(1)' -``` -produces -```mdtest-output -8. -"abcDEF" - -``` - -### 6.10 Aggregate Function Calls - -[Aggregate functions](aggregates/README.md) may be called within an expression. -Unlike the aggregation context provided by a summarizing group-by, such calls -in expression context yield an output value for each input value. - -Note that because aggregate functions carry state which is typically -dependent on the order of input values, their use can prevent the runtime -optimizer from parallelizing a query. - -That said, aggregate function calls can be quite useful in a number of contexts. -For example, a unique ID can be assigned to the input quite easily: -```mdtest-command -echo '"foo" "bar" "baz"' | zq -z 'yield {id:count(),value:this}' - -``` -produces -```mdtest-output -{id:1(uint64),value:"foo"} -{id:2(uint64),value:"bar"} -{id:3(uint64),value:"baz"} -``` -In contrast, calling aggregate functions within `summarize` -```mdtest-command -echo '"foo" "bar" "baz"' | zq -z 'summarize count(),union(this)' - -``` -produces just one output value -```mdtest-output -{count:3(uint64),union:|["bar","baz","foo"]|} -``` - -### 6.11 Literals - -Any of the [data types listed above](#5-data-types) may be used in expressions -as long as it is compatible with the semantics of the expression. - -String literals are enclosed in either single quotes or double quotes and -must conform to UTF-8 encoding and follow the JavaScript escaping -conventions and unicode escape syntax. Also, if the sequence `${` appears -in a string the `$` character must be escaped, i.e., `\$`. - -#### 6.11.1 String Interpolation - -Strings may include interpolation expressions, which has the form -``` -${ } -``` -In this case, the characters starting with `$` and ending at `}` are substituted -with the result of evaluating the expression ``. If this result is not -a string, it is implicitly cast to a string. - -If any template expression results in an error, then the value of the template -literal is the first error encountered in left-to-right order. - -> TBD: we could improve an error result here by creating a structured error -> containing the string template text along with a list of values/errors of -> the expressions. - -String interpolation may be nested, where `` contains additional strings -with interpolated expressions. - -#### 6.11.2 Record Expressions - -Record literals have the form -``` -{ , , ... } -``` -where a `` has one of three forms: -``` - : - -... -``` -The first form is a customary colon-separated field and value similar to JavaScript, -where `` may be an identifier or quoted string. -The second form is an implied field reference ``, which is shorthand -for `:`. The third form is the `...` spread operator which expects -a record value as the result of `` and inserts all of the fields from -the resulting record. -If a spread expression results in a non-record type (e.g., errors), then that -part of record is simply elided. - -The fields of a record expression are evaluated left to right and when -field names collide the rightmost instance of the name determines that -field's value. - -For example, -```mdtest-command -echo '{x:1,y:2,r:{a:1,b:2}}' | zq -z 'yield {a:0},{x}, {...r}, {a:0,...r,b:3}' - -``` -produces -```mdtest-output -{a:0} -{x:1} -{a:1,b:2} -{a:1,b:3} -``` - -#### 6.11.3 Array Expressions - -Array literals have the form -``` -[ , , ... ] -``` -When the expressions result in values of non-uniform type, then the implied -type of the array is an array of type union of the types that appear. - -For example, -```mdtest-command -zq -z 'yield [1,2,3],["hello","world"]' -``` -produces -```mdtest-output -[1,2,3] -["hello","world"] -``` - -#### 6.11.4 Set Expressions - -Set literals have the form -``` -|[ , , ... ]| -``` -When the expressions result in values of non-uniform type, then the implied -type of the set is a set of type union of the types that appear. - -Set values are always organized in their "natural order" independent of the order -they appear in the set literal. - -For example, -```mdtest-command -zq -z 'yield |[3,1,2]|,|["hello","world","hello"]|' -``` -produces -```mdtest-output -|[1,2,3]| -|["hello","world"]| -``` - -#### 6.11.5 Map Expressions - -Map literals have the form -``` -|{ :, :, ... }| -``` -where the first expression of each colon-separated entry is the key value -and the second expression is the value. -When the key and/or value expressions results in values of non-uniform type, -then the implied type of the map has a key type and/or value type that is -a union of the types that appear in each respective category. - -For example, -```mdtest-command -zq -z 'yield |{"foo":1,"bar"+"baz":2+3}|' -``` -produces -```mdtest-output -|{"foo":1,"barbaz":5}| -``` - -#### 6.11.6 Union Values - -A union value can be created with a cast. For example, a union of types `int64` -and `string` is expressed as `(int64,string)` and any value that has a type -that appears in the union type may be cast to that union type. -Since 1 is an `int64` and "foo" is a `string`, they both can be -values of type `(int64,string)`, e.g., -```mdtest-command -echo '1 "foo"' | zq -z 'yield cast(this,<(int64,string)>)' - -``` -produces -```mdtest-output -1((int64,string)) -"foo"((int64,string)) -``` -The value underlying a union-tagged value is accessed with the -[under function](functions/under.md): -```mdtest-command -echo '1((int64,string))' | zq -z 'yield under(this)' - -``` -produces -```mdtest-output -1 -``` -Union values are powerful because they provide a mechanism to precisely -describe the type of any nested, semi-structured value composed of elements -of different types. For example, the type of the value `[1,"foo"]` in Javascript -is simply a generic Javascript "object". But in Zed, the type of this -value is an array of union of string and integer, e.g., -```mdtest-command -echo '[1,"foo"]' | zq -z 'typeof(this)' - -``` -produces -```mdtest-output -<[(int64,string)]> -``` - -### 6.12 Constants - -Constants may be declared and bound to an identifier with a `const` statement, -which has the form -``` -const = -``` -This statement evaluates the expressions `` before any input is processed -to determine the constant value assigned to the identifier ``. -This expression may not refer to `this` or any implied fields of `this`. - -Constants must appear at the beginning -of a query or the beginning of a [parenthesized scope](#81-lateral-scope). - -```mdtest-command -echo '{diameter:1}{diameter:5}' | zq -z 'const PI = 3.14159 circumference:=2*PI*diameter' - -``` -produces -```mdtest-output -{diameter:1,circumference:6.28318} -{diameter:5,circumference:31.4159} -``` - -### 6.13 Type Definitions - -Named types may be declared and bound to an identifier with a `type` statement, -which has the form -``` -type = -``` -This statement evaluates the type `` before any input is processed -to compute a type value assigned to the identifier ``. - -In addition, a type statement creates a binding for the named type in -the runtime's type system, which may be overridden by any input that -redefines the named type. - -When referred to by the defined identifier, the use of this type is not -overridden by the input data; however, type values that refer to the named -type may be redefined. - -Type definitions must appear at the beginning -of a query or the beginning of a [parenthesized scope](#81-lateral-scope). - -```mdtest-command -echo '{s:1}{s:10.0.0.1}' | zq -z 'type foo = {s:string} cast(this, foo)' - -``` -produces -```mdtest-output -{s:"1"}(=foo) -{s:"10.0.0.1"}(=foo) -``` - -### 6.14 Casts - -Type conversion is performed with casts and the built-in function `cast()`. - -Casts for primitive types have a function-style syntax of the form -``` - ( ) -``` -where `` is a Zed type and `` is any Zed expression. -In the case of primitive types, the type-value angle brackets -may be omitted, e.g., `(1)` is equivalent to `string(1)`. -If the result of `` cannot be converted -to the indicated type, then the cast's result is an error value. - -For example, -```mdtest-command -echo '1 200 "123" "200"' | zq -z 'yield int8(this)' - -``` -produces -```mdtest-output -1(int8) -error("cannot cast 200 to type int8") -123(int8) -error("cannot cast \"200\" to type int8") -``` - -Casting attempts to be fairly liberal in conversions. For example, values -of type `time` can be created from a diverse set of data/time input strings -based on the [Go Date Parser library](https://github.com/araddon/dateparse). - -```mdtest-command -echo '"May 8, 2009 5:57:51 PM" "oct 7, 1970"' | zq -z 'yield time(this)' - -``` -produces -```mdtest-output -2009-05-08T17:57:51Z -1970-10-07T00:00:00Z -``` - -Casts of complex or named types may be performed using type values -either in functional form or with `cast`: -``` - ( ) -cast(, ) -``` -For example -```mdtest-command -echo '80 8080' | zq -z 'type port = uint16 yield (this)' - -``` -produces -```mdtest-output -80(port=uint16) -8080(port=uint16) -``` - -Casts may be used with complex types as well. As long as the target type can -accommodate the value, the case will be recursively applied to the components -of a nested value. For example, -For example -```mdtest-command -echo '["10.0.0.1","10.0.0.2"]' | zq -z 'cast(this,<[ip]>)' - -``` -produces -```mdtest-output -[10.0.0.1,10.0.0.2] -``` -and -```mdtest-command -echo '{ts:"1/1/2022",r:{x:"1",y:"2"}} {ts:"1/2/2022",r:{x:3,y:4}}' | zq -z 'cast(this,<{ts:time,r:{x:float64,y:float64}}>)' - -``` -produces -```mdtest-output -{ts:2022-01-01T00:00:00Z,r:{x:1.,y:2.}} -{ts:2022-01-02T00:00:00Z,r:{x:3.,y:4.}} -``` - -## 7. Search Expressions - -Search expressions provide a hybrid syntax between keyword search -and boolean expressions. In this way, a search is a shorthand for -a "lean forward" style activity where one is interactively exploring -data with ad hoc searches. All shorthand searches have a corresponding -long form built from the expression syntax above in combination with the -[search term syntax](#721-search-terms) described below. - -### 7.1 Search Patterns - -Several styles of string search can be performed with a search expression -(as well as the [grep function](functions/grep.md)) using "patterns", -where a pattern is a regular expression, glob, or simple string. - -#### 7.1.1 Regular Expressions - -A regular expression is specified in the familiar slash syntax where the -expression begins with a `/` character and ends with a terminating `/` character. -The string between the slashed (exclusive of those characters) is the -regular expression. - -The format of Zed regular expressions follows the syntax of the -[RE2 regular expression library](https://github.com/google/re2) -and is documented in the -[RE2 Wiki](https://github.com/google/re2/wiki/Syntax). - -Regular expressions may be used freely in search expressions, e.g., -```mdtest-command -echo '"foo" {s:"bar"} {s:"baz"} {foo:1}' | zq -z '/(foo|bar)/' - -``` -produces -```mdtest-output -"foo" -{s:"bar"} -{foo:1} -``` -Regular expressions may also appear in the `grep` function: -```mdtest-command -echo '"foo" {s:"bar"} {s:"baz"} {foo:1}' | zq -z 'yield grep(/ba.*/, s)' - -``` -produces -```mdtest-output -false -true -true -false -``` - -#### 7.1.2 Globs - -Globs provide a convenient short-hand for regular expressions and follow -the familiar pattern of "file globbing" supported by Unix shells. -Zed globs are a simple, special case utilize only the `*` wildcard. - -Valid glob characters include `a` through `z`, `A` through `Z`, -any valid string escape sequence -(along with escapes for `*`, `=`, `+`, `-`), and the unescaped characters: -``` -_ . : / % # @ ~ -``` -A glob must begin with one of these characters or `*` then may be -followed by any of these characters, `*`, or digits `0` through `9`. - -> Note that these rules do not allow for a leading digit. - -For example, a prefix match is easily accomplished via `prefix*`, e.g., -```mdtest-command -echo '"foo" {s:"bar"} {s:"baz"} {foo:1}' | zq -z 'b*' - -``` -produces -```mdtest-output -{s:"bar"} -{s:"baz"} -``` -Likewise, a suffix match may be performed as follows: -```mdtest-command -echo '"foo" {s:"bar"} {s:"baz"} {foo:1}' | zq -z '*z' - -``` -produces -```mdtest-output -{s:"baz"} -``` -and -```mdtest-command -echo '"foo" {s:"bar"} {s:"baz"} {a:1}' | zq -z '*a*' - -``` -produces -```mdtest-output -{s:"bar"} -{s:"baz"} -{a:1} -``` - -Note that a glob may look like multiplication but context disambiguates -these condition, e.g., -``` -a*b -``` -is a glob match for any matching string value in the input, but -``` -a*b==c -``` -is a Boolean comparison between the product `a*b` and `c`. - -### 7.2 Search Logic - -The search patterns described above can be combined with other elements -to a search expression comprised of "search terms" that may be combined -using Boolean logic. - -> Note that when processing ZNG data, the Zed runtime performs a multi-threaded -> Boyer-Moore scan over decompressed data buffers before parsing any data. -> This allows large buffers of data to be efficiently discarded and skipped when -> searching for rarely occurring values. For a [Zed lake](../lake/format.md), search indexes -> may also be configured to further accelerate searches. -> In a forthcoming release, Zed will also offer an approach for locating -> delimited words within string fields, which will allow accelerated -> search using a full-text search index. Currently, search indexes may be built -> for exact value match as text segmentation is in the works.a - -#### 7.2.1 Search Terms - -A "search term" is one of the following; -* a regular expression as described above, -* a glob as described above, -* a keyword, -* any literal of a primitive type, or -* expression predicates. - -##### 7.2.1.1 Regular Expression Search Term - -A regular expression `/re/` is equivalent to -``` -grep(/reg/, this) -``` -but shorter and easier to type in a search expression. - -For example, -``` -/(foo|bar.*baz.*\.com)/ -``` -Searches for any string that begins with `foo` or `bar` has the string -`baz` in it and ends with `.com`. - -##### 7.2.1.2 Glob Search Term - -A glob search term `` is equivalent to -``` -grep(/reg/, this) -``` -but shorter and easier to type in a search expression. - -For example, -``` -foo*baz*.com -``` -Searches for any string that begins with `foo` has the string -`baz` in it and ends with `.com`. - -##### 7.2.1.3 Keyword Search Term - -Keywords and string literals are equivalent search terms so it is often -easier to quote a string search term instead of using escapes in a keyword. -Keywords are useful in interactive modes of use where searches can be issued -and modified quickly without having to type matching quotes. - -Keyword search has the look and feel of Web search or email search. - -Valid keyword characters include `a` through `z`, `A` through `Z`, -any valid string escape sequence -(along with escapes for `*`, `=`, `+`, `-`), and the unescaped characters: -``` -_ . : / % # @ ~ -``` -A keyword must begin with one of these characters then may be -followed by any of these characters or digits `0` through `9`. - -A keyword search is equivalent to -``` -grep(, this) -``` -where `` is the quoted string-literal of the unquoted string. -For example, -``` -search foo -``` -is equivalent to -``` -where grep("foo", this) -``` - -Note that the "search" keyword may be omitted. -For example, the simplest Zed program is perhaps a single keyword search, e.g., -``` -foo -``` -As above, this program searches the implied input for input values that -contain the string "foo". - -##### 7.2.1.4 String Literal Search Term - -A string literal as a search term is simply a search for that string and is -equivalent to -``` -grep(, this) -``` -For example, -``` -search "foo" -``` -is equivalent to -``` -where grep("foo", this) -``` - -> Note that this equivalency between keyword search terms and grep semantics -> will change in the near future when we add support for full-text search. -> In this case, grep will still support substring match but keyword search -> will match segmented words from string fields so that they can be efficiently -> queried in search indexes. - -##### 7.2.1.5 Non-String Literal Search Term - -Search terms representing non-string Zed values search for both an exact -match for the given value as well as a string search for the term exactly -as it appears as typed. Such values include: -* integers, -* floating point numbers, -* time values, -* durations, -* IPs, -* networks, -* bytes values, and -* type values. - -A search for a Zed value `` represented as the string `` is -equivalent to -``` - in this or grep(, this) -``` -For example, -``` -search 123 and 10.0.0.1 -``` -which can be abbreviated -``` -123 10.0.0.1 -``` -is equivalent to -``` -where (123 in this or grep("123", this)) and (10.0.0.1 in this or grep("10.0.0.1", this)) -``` - -Complex values are not supported as search terms but may be queried with -the "in" operator, e.g., -``` -{s:"foo"} in this -``` - -##### 7.2.1.6 Predicate Search Term - -Any Boolean-valued [function](functions/README.md) like `is()`, `has()`, -`grep()` etc. and any [comparison expression](#62-comparisons) -may be used as a search term and mixed into a search expression. - -For example, -``` -is() has(bar) baz x==y+z -``` -is a valid search expression but -``` -/foo.*/ x+1 -``` -is not. - -#### 7.3 Boolean Logic - -Search terms may be combined into boolean expressions using logical operators -`and`, `or` and `not`. `and` may be elided; i.e., concatenation of search terms -is a logical `and`. `not` has highest precedence and `and` has precedence over -`or`. Parentheses may be used to override natural precedence. - -Note that the concatenation form of `and` is not valid in standard expressions and -is available only in search expressions. -Concatenation is convenient in interactive sessions but it is best practice to -explicitly include the `and` operator when editing Zed source files. - -For example, -``` -not foo bar or baz -``` -means -``` -((not grep("foo")) and grep("bar)) or grep("baz") -``` -while -``` -foo (bar or baz) -``` -means -``` -grep("foo") and (grep("bar)) or grep("baz")) -``` - -## 8. Lateral Subqueries - -Lateral subqueries provide a powerful means to apply a Zed query -to each subsequence of values generated from an outer sequence of values. -The inner query may be _any Zed query_ and may refer to values from -the outer sequence. - -Lateral subqueries are created using the scoped form of the -[over operator](operators/over.md#operator) and may be nested to arbitrary depth. - -For example, -```mdtest-command -echo '{s:"foo",a:[1,2]} {s:"bar",a:[3]}' | zq -z 'over a with name=s => (yield {name,elem:this})' - -``` -produces -```mdtest-output -{name:"foo",elem:1} -{name:"foo",elem:2} -{name:"bar",elem:3} -``` -Here the lateral scope, described below, creates a subquery -``` -yield {name,elem:this} -``` -for each sub-sequence of values derived from each outer input value. -In the example above, there are two input values: -``` -{s:"foo",a:[1,2]} -{s:"bar",a:[3]} -``` -which imply two subqueries derived from the `over` operator traversing `a`. -The first subquery thus operates on the input values `1, 2` with the variable -`name` set to "foo" assigning `1` and then `2` to `this`, thereby emitting -``` -{name:"foo",elem:1} -{name:"foo",elem:2} -``` -and the second subquery operators on the input value `3` with the variable -`name` set to "bar", emitting -``` -{name:"bar",elem:3} -``` - -You can also import a parent-scope field reference into the inner scope by -simply referring to its name without assignment, e.g., -```mdtest-command -echo '{s:"foo",a:[1,2]} {s:"bar",a:[3]}' | zq -z 'over a with s => (yield {s,elem:this})' - -``` -produces -```mdtest-output -{s:"foo",elem:1} -{s:"foo",elem:2} -{s:"bar",elem:3} -``` - -### 8.1 Lateral Scope - -A lateral scope has the form `=> ( )` and currently appears -only the context of an [over operator](operators/over.md#operator), -as illustrated above, and has the form: -``` -over ... with [, ...] => ( ) -``` -where `` has either an assignment form -``` -= -``` -or a field reference form -``` - -``` -For each input value to the outer scope, the assignment form creates a binding -between each `` evaluated in the outer scope and each ``, which -represents a new symbol in the inner scope of the ``. -In the field reference form, a single identifier `` refers to a field -in the parent scope and makes that field's value available in the lateral scope -with the same name. - -The ``, which may be any Zed query, is evaluated once per outer value -on the sequence generated by the `over` expression. In the lateral scope, -the value `this` refers to the inner sequence generated from the `over` expressions. -This query runs to completion for each inner sequence and emits -each subquery result as each inner sequence traversal completes. - -This structure is powerful because _any_ Zed query can be appear in the body of -the lateral scope. In contrast to the `yield` example, a sort could be -applied to each sub-sequence in the subquery, where sort -reads all of values of the subsequence, sorts them, emits them, then -repeats the process for the next subsequence. For example, -```mdtest-command -echo '[3,2,1] [4,1,7] [1,2,3]' | zq -z 'over this => (sort this | collect(this))' - -``` -produces -```mdtest-output -{collect:[1,2,3]} -{collect:[1,4,7]} -{collect:[1,2,3]} -``` - -### 8.2 Lateral Expressions - -Lateral subqueries can also appear in expression context using the -parenthesized form: -``` -( over [, ...] [with = [, ... [=]] | ) -``` -> Note that the parentheses disambiguate a lateral expression from a lateral -> dataflow operator. - -This form must always include a lateral scope as indicated by ``, -which can be any dataflow operaetor sequence excluding `from` operators. -As with the `over` operator, values from the outer scope can be brought into -the lateral scope using the `with` clause. - -The lateral expression is evaluated by evalating each `` and feeding -the results as inputs to the `` dataflow operators. Each time the -lateral expression is evaluated, the lateral operators are run to completion, -e.g., -```mdtest-command -echo '[3,2,1] [4,1,7] [1,2,3]' | zq -z 'yield (over this | sum(this))' - -``` -produces -```mdtest-output -{sum:6} -{sum:12} -{sum:6} -``` -This structure generalizes to any more complicated expression context, -e.g., we can embed multiple lateral expressions inside of a record literal -and use the spread operator to tighten up the output: -```mdtest-command -echo '[3,2,1] [4,1,7] [1,2,3]' | zq -z '{...(over this | sort this | sorted:=collect(this)),...(over this | sum(this))}' - -``` -produces -```mdtest-output -{sorted:[1,2,3],sum:6} -{sorted:[1,4,7],sum:12} -{sorted:[1,2,3],sum:6} -``` - -## 9. Shaping - -Data that originates from heterogeneous sources typically has -inconsistent structure and is thus difficult to reason about or query. -To unify disparate data sources, data is often cleaned up to fit into -a well-defined set of schemas, which combines the data into a unified -store like a data warehouse. - -In Zed, this cleansing process is called "shaping" the data and Zed leverages -its rich, super-structured type system to perform core aspects of -data transformation. -In a data model with nesting and multiple scalar types (such as Zed or JSON), -shaping includes converting type of leaf fields, adding or removing fields -to "fit" a given shape, and reordering fields. - -While shaping remains an active area of development, the core functions in Zed -that currently perform shaping are: - -* [cast](functions/cast.md) - coerce a value to a different type -* [crop](functions/crop.md) - remove fields from a value that are missing in a specified type -* [fill](functions/fill.md) - add null values for missing fields -* [order](functions/order.md) - reorder record fields -* [shape](functions/shape.md) - apply cast, fill, and order - -They all have the same signature, taking two parameters: the value to be -transformed and a type value for the target type. - -> Another type of transformation that's needed for shaping is renaming fields, -> which is supported by the [rename operator](operators/rename.md#operator). -> Also, the [yield operator](operators/yield.md#operator) -> is handy for simply emitting new, arbitrary record literals based on -> input values and mixing in these shaping functions in an embedded record literal. -> The [fuse aggregate function](aggregates/fuse.md) is useful for fusing -> values into a common schema within a group-by schema though a type is returned -> rather than values. - -In the examples below, we will use the following named type `connection` -that is stored in a file `connection.zed` -and is included in the example Zed queries with `-I` option of `zq`: -```mdtest-input connection.zed -type socket = { addr:ip, port:port=uint16 } -type connection = { - kind: string, - client: socket, - server: socket, - vlan: uint16 -} -``` -We also use this sample JSON input in a file called `sample.json`: -```mdtest-input sample.json -{ - "kind": "dns", - "server": { - "addr": "10.0.0.100", - "port": 53 - }, - "client": { - "addr": "10.47.1.100", - "port": 41772 - }, - "uid": "C2zK5f13SbCtKcyiW5" -} -``` - -### 9.1 Cast - -The cast function applies a cast operation to each leaf value that matches the -field path in the specified type, e.g., -```mdtest-command -zq -Z -I connection.zed "cast(this, )" sample.json -``` -casts the address fields to type `ip`, the port fields to type `port` -(which is a typedef for `uint16`) and the address port pairs to -type `socket` without modifying the `uid` field or changing the -order of the `server` and `client` fields: -```mdtest-output -{ - kind: "dns", - server: { - addr: 10.0.0.100, - port: 53 (port=uint16) - } (=socket), - client: { - addr: 10.47.1.100, - port: 41772 - } (socket), - uid: "C2zK5f13SbCtKcyiW5" -} -``` - -### 9.2 Crop - -Cropping is a useful when you want records to "fit" a schema tightly, e.g., -```mdtest-command -zq -Z -I connection.zed "crop(this, )" sample.json -``` -removes the `uid` field since it is not in the _connection_ type: -```mdtest-output -{ - kind: "dns", - server: { - addr: "10.0.0.100", - port: 53 - }, - client: { - addr: "10.47.1.100", - port: 41772 - } -} -``` - -### 9.3 Fill - -Use fill when you want to fill out missing fields with nulls, e.g., -```mdtest-command -zq -Z -I connection.zed "fill(this, )" sample.json -``` -adds a null-valued `vlan` field since the input value is missing it and -the _connection_ type has it: -```mdtest-output -{ - kind: "dns", - server: { - addr: "10.0.0.100", - port: 53 - }, - client: { - addr: "10.47.1.100", - port: 41772 - }, - uid: "C2zK5f13SbCtKcyiW5", - vlan: null (uint16) -} -``` - -### 9.4 Order - -The order function changes the order of fields in its input to match the -specified order, as field order is significant in Zed records, e.g., -```mdtest-command -zq -Z -I connection.zed "order(this, )" sample.json -``` -reorders the `client` and `server` fields to match the input but does nothing -about the `uid` field as it is not in the _connection_ type: -```mdtest-output -{ - kind: "dns", - client: { - addr: "10.47.1.100", - port: 41772 - }, - server: { - addr: "10.0.0.100", - port: 53 - }, - uid: "C2zK5f13SbCtKcyiW5" -} -``` - -### 9.5 Shape - -The shape function brings everything together by applying `cast`, -`fill`, and `order` all in one step, e.g., -```mdtest-command -zq -Z -I connection.zed "shape(this, )" sample.json -``` -reorders the `client` and `server` fields to match the input but does nothing -about the `uid` field as it is not in the _connection_ type: -```mdtest-output -{ - kind: "dns", - client: { - addr: 10.47.1.100, - port: 41772 (port=uint16) - } (=socket), - server: { - addr: 10.0.0.100, - port: 53 - } (socket), - vlan: null (uint16), - uid: "C2zK5f13SbCtKcyiW5" -} -``` -To get a tight shape of the target type, -apply `crop` to the output of `shape`, e.g., -```mdtest-command -zq -Z -I connection.zed "shape(this, ) | crop(this, )" sample.json -``` -drops the `uid` field after shaping: -```mdtest-output -{ - kind: "dns", - client: { - addr: 10.47.1.100, - port: 41772 (port=uint16) - } (=socket), - server: { - addr: 10.0.0.100, - port: 53 - } (socket), - vlan: null (uint16) -} -``` -## 10. Type Fusion - -Type fusion is another important building block of data shaping. -Here, types are operated upon by fusing them together, where the -result is single fused type. -Some systems call a related process "schema inference" where a set -of values, typically JSON, is analyzed to determine a relational schema -that all the data will fit into. However, this is just a special case of -type fusion as fusion is fine-grained and based on Zed's type system rather -than having the narrower goal of computing a schema for representations -like relational tables, Parquet, Avro, etc. - -Type fusion utilizes two key techniques. - -The first technique is to simply combine types with a type union. -For example, an `int64` and a `string` can be merged into a common -type of union `(int64,string)`, e.g., the value sequence `1 "foo"` -can be fused into the single-type sequence: -``` -1((int64,string)) -"foo"((int64,string)) -``` -The second technique is to merge fields of records, analogous to a spread -expression. Here, the value sequence `{a:1}{b:"foo"}` may be -fused into the single-type sequence: -``` -{a:1,b:null(string)} -{a:null(int64),b:"foo"} -``` - -Of course, these two techniques can be powerfully combined, -e.g., where the value sequence `{a:1}{a:"foo",b:2}` may be -fused into the single-type sequence: -``` -{a:1((int64,string)),b:null(int64)} -{a:"foo"((int64,string)),b:2} -``` - -To perform fusion, Zed currently includes two key mechanisms -(though this is an active area of development): -* the [fuse operator](operators/fuse.md#operator), and -* the [fuse aggregate function](aggregates/fuse.md). - -### 10.1 Fuse Operator - -The _fuse operator_ reads all of its input, computes a fused type using -the techniques above, and outputs the result, e.g., -```mdtest-command -echo '{x:1} {y:"foo"}{x:2,y:"bar"}' | zq -z fuse - -``` -produces -```mdtest-output -{x:1,y:null(string)} -{x:null(int64),y:"foo"} -{x:2,y:"bar"} -``` -whereas -```mdtest-command -echo '{x:1} {x:"foo",y:"foo"}{x:2,y:"bar"}' | zq -z fuse - -``` -requires a type union for field `x` and produces: -```mdtest-output -{x:1((int64,string)),y:null(string)} -{x:"foo"((int64,string)),y:"foo"} -{x:2((int64,string)),y:"bar"} -``` - -### 10.2 Fuse Function - -The _fuse function_ is most often useful during data exploration and discovery -where you might interactively run queries to determine the shapes of some new -or unknown input data and how those various shapes relate to one another. - -For example, in example sequence above, we can use the _fuse function_ to determine -the fused type rather than transforming the values, e.g., -```mdtest-command -echo '{x:1} {x:"foo",y:"foo"}{x:2,y:"bar"}' | zq -z 'fuse(this)' - -``` -results in -```mdtest-output -{fuse:<{x:(int64,string),y:string}>} -``` -Since the _fuse_ here is an aggregate function, it can also be used with -group-by keys. Supposing we wanted to fuse different type records into -different types, we can use a group-by. In this simple example, we will -fuse records based on their number of fields using the `len()` function: -```mdtest-command -echo '{x:1} {x:"foo",y:"foo"}{x:2,y:"bar"}' | zq -z 'fuse(this) by len(this) | sort len' - -``` -which produces -```mdtest-output -{len:1,fuse:<{x:int64}>} -{len:2,fuse:<{x:(int64,string),y:string}>} -``` -Now, we can turn around and write a "shaper" for data that has the patterns -we "discovered" above, e.g., if this Zed source is in `shape.zed` -```mdtest-input shape.zed -switch len(this) ( - case 1 => pass - case 2 => yield shape(this, <{x:(int64,string),y:string}>) - default => yield error({kind:"unrecognized shape",value:this}) -) -``` -when we run -```mdtest-command -echo '{x:1} {x:"foo",y:"foo"}{x:2,y:"bar"}{a:1,b:2,c:3}' | zq -z -I shape.zed '| sort -r this' - -``` -we get -```mdtest-output -{x:1} -{x:"foo"((int64,string)),y:"foo"} -{x:2((int64,string)),y:"bar"} -error({kind:"unrecognized shape",value:{a:1,b:2,c:3}}) -``` diff --git a/versioned_docs/version-v1.1.0/language/ztests/README.md b/versioned_docs/version-v1.1.0/language/ztests/README.md deleted file mode 100644 index 0a53d04ee..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/README.md +++ /dev/null @@ -1,4 +0,0 @@ -The automated tests in this directory ensure the correctess of examples shown -in the Zed language docs that are not otherwise protected via -[mdtest](../../../mdtest/mdtest.go). See [zed/2901](https://github.com/brimdata/zed/pull/2901) -for details. diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-background-1.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-background-1.yaml deleted file mode 100644 index d448560c2..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-background-1.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below is exactly as it appears in the top-level -# docs/language/README.md. - -zed: | - widget - -input: | - {"text": "this is a sentence with the word widget in it"} - {"text": "this search for WiDgEt is case insensitive"} - {"text": "it also looks for substrings so superwidgetythings will match"} - {"text": "whereas stuff without the word surely will not"} - -output: | - {text:"this is a sentence with the word widget in it"} - {text:"this search for WiDgEt is case insensitive"} - {text:"it also looks for substrings so superwidgetythings will match"} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-background-2.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-background-2.yaml deleted file mode 100644 index f0fb0e1ea..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-background-2.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below is exactly as it appears in the top-level -# docs/language/README.md. - -zed: | - widget | price > 1000 - -input: | - {"text": "this is a sentence with the word widget in it", "price":999} - {"text": "this search for WiDgEt is case insensitive", "price":1001} - {"text": "it also looks for substrings so superwidgetythings will match","price": 1000.1} - {"text": "whereas stuff without the word surely will not", "price":1000.1} - -output: | - {text:"this search for WiDgEt is case insensitive",price:1001} - {text:"it also looks for substrings so superwidgetythings will match",price:1000.1} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-background-3.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-background-3.yaml deleted file mode 100644 index 8661e30bb..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-background-3.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below is exactly as it appears in the top-level -# docs/language/README.md. - -zed: | - widget and price > 1000 - -input: | - {"text": "this is a sentence with the word widget in it", "price":999} - {"text": "this search for WiDgEt is case insensitive", "price":1001} - {"text": "it also looks for substrings so superwidgetythings will match","price": 1000.1} - {"text": "whereas stuff without the word surely will not", "price":1000.1} - -output: | - {text:"this search for WiDgEt is case insensitive",price:1001} - {text:"it also looks for substrings so superwidgetythings will match",price:1000.1} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-background-4.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-background-4.yaml deleted file mode 100644 index 1c9288d66..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-background-4.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below is exactly as it appears in the top-level -# docs/language/README.md. - -zed: | - widget price > 1000 - -input: | - {"text": "this is a sentence with the word widget in it", "price":999} - {"text": "this search for WiDgEt is case insensitive", "price":1001} - {"text": "it also looks for substrings so superwidgetythings will match","price": 1000.1} - {"text": "whereas stuff without the word surely will not", "price":1000.1} - -output: | - {text:"this search for WiDgEt is case insensitive",price:1001} - {text:"it also looks for substrings so superwidgetythings will match",price:1000.1} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-background-5.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-background-5.yaml deleted file mode 100644 index 1bdfe4223..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-background-5.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below has been modified from the way it appears in -# docs/language/README.md, as the "sort" is needed to produce deterministic -# test output from the aggregation. - -zed: | - summarize count() by color | sort - -input: | - {"color":"brown","name":"kiwi","flavor":"sweet"} - {"color":"red","name":"apple","flavor":"tart"} - {"color":"brown","name":"coconut","flavor":"nutty"} - -output: | - {color:"red",count:1(uint64)} - {color:"brown",count:2(uint64)} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-background-6.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-background-6.yaml deleted file mode 100644 index ed73b1e3e..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-background-6.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below has been modified from the way it appears in -# docs/language/README.md, as the "sort" is needed to produce deterministic -# test output from the aggregation. - -zed: | - count() by color | sort - -input: | - {"color":"brown","name":"kiwi","flavor":"sweet"} - {"color":"red","name":"apple","flavor":"tart"} - {"color":"brown","name":"coconut","flavor":"nutty"} - -output: | - {color:"red",count:1(uint64)} - {color:"brown",count:2(uint64)} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-background-7.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-background-7.yaml deleted file mode 100644 index 1d445b90d..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-background-7.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below is exactly as it appears in the top-level -# docs/language/README.md. - -zed: | - where grep("widget") and price > 1000 - -input: | - {"text": "this is a sentence with the word widget in it", "price":999} - {"text": "this search for WiDgEt is case insensitive", "price":1001} - {"text": "it also looks for substrings so superwidgetythings will match","price": 1000.1} - {"text": "whereas stuff without the word surely will not", "price":1000.1} - -output: | - {text:"this search for WiDgEt is case insensitive",price:1001} - {text:"it also looks for substrings so superwidgetythings will match",price:1000.1} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-background-8.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-background-8.yaml deleted file mode 100644 index f2b4f41ed..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-background-8.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below is exactly as it appears in the top-level -# docs/language/README.md. - -zed: | - widget price > 1000 | count() by color | count >= 10 | sort count - -input: | - {"color":"brown","widget":"kiwi","flavor":"sweet","price":1001} - {"color":"red","widget":"apple","flavor":"tart","price":1002} - {"color":"brown","widget":"coconut","flavor":"nutty","price":1003} - {"color":"brown","widget":"one","price":1004} - {"color":"brown","widget":"two","price":1005} - {"color":"brown","widget":"three","price":1006} - {"color":"brown","widget":"four","price":1007} - {"color":"brown","widget":"five","price":1008} - {"color":"brown","widget":"six","price":1009} - {"color":"brown","widget":"seven","price":1010} - {"color":"brown","widget":"eight","price":1011} - -output: | - {color:"brown",count:10(uint64)} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-background-9.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-background-9.yaml deleted file mode 100644 index e48d66e24..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-background-9.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below is exactly as it appears in the top-level -# docs/language/README.md. - -zed: | - search widget and price > 1000 - | summarize count() by color - | where count >= 10 - | sort count - -input: | - {"color":"brown","widget":"kiwi","flavor":"sweet","price":1001} - {"color":"red","widget":"apple","flavor":"tart","price":1002} - {"color":"brown","widget":"coconut","flavor":"nutty","price":1003} - {"color":"brown","widget":"one","price":1004} - {"color":"brown","widget":"two","price":1005} - {"color":"brown","widget":"three","price":1006} - {"color":"brown","widget":"four","price":1007} - {"color":"brown","widget":"five","price":1008} - {"color":"brown","widget":"six","price":1009} - {"color":"brown","widget":"seven","price":1010} - {"color":"brown","widget":"eight","price":1011} - -output: | - {color:"brown",count:10(uint64)} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-directed-acyclic-flow-graphs-1.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-directed-acyclic-flow-graphs-1.yaml deleted file mode 100644 index 65942896b..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-directed-acyclic-flow-graphs-1.yaml +++ /dev/null @@ -1,51 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below has been modified from the way it appears in -# docs/language/README.md: -# -# from PoolOne | fork ( -# => op1 | op2 | ... -# => op1 | op2 | ... -# ) | merge ts | ... -# -# Specifically, the "op1", "op2", and "..." have been filled in with real -# operations, and the "merge" has been replaced with a "sort" for now since -# merge has not yet been fully implemented -# (https://github.com/brimdata/zed/issues/2906). - -script: | - export ZED_LAKE=test - zed init -q - zed create -q PoolOne - zed load -q -use PoolOne fruit.zson - zed query -z -I split.zed - -inputs: - - name: fruit.zson - data: | - {ts:2018-03-24T17:15:21Z,name:"apple",color:"red"} - {ts:2018-03-24T17:16:55Z,name:"banana",color:"yellow"} - {ts:2018-03-24T17:21:23Z,name:"avocado",color:"green"} - {ts:2018-03-24T17:23:29Z,name:"strawberry",color:"red"} - - name: split.zed - data: | - from PoolOne | fork ( - => allfruit:=collect(name),allcolor:=collect(color) by every(5m) | put numfruit:=len(allfruit) | put numcolor:=len(allcolor) - => put color:=upper(color) | put namelen:=len(name) | put tag:="mytag" - ) | sort ts | rename time:=ts - -outputs: - - name: stdout - data: | - {time:2018-03-24T17:15:00Z,allfruit:["banana","apple"],allcolor:["yellow","red"],numfruit:2,numcolor:2} - {time:2018-03-24T17:15:21Z,name:"apple",color:"RED",namelen:5,tag:"mytag"} - {time:2018-03-24T17:16:55Z,name:"banana",color:"YELLOW",namelen:6,tag:"mytag"} - {time:2018-03-24T17:20:00Z,allfruit:["strawberry","avocado"],allcolor:["red","green"],numfruit:2,numcolor:2} - {time:2018-03-24T17:21:23Z,name:"avocado",color:"GREEN",namelen:7,tag:"mytag"} - {time:2018-03-24T17:23:29Z,name:"strawberry",color:"RED",namelen:10,tag:"mytag"} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-directed-acyclic-flow-graphs-2.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-directed-acyclic-flow-graphs-2.yaml deleted file mode 100644 index 03406272a..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-directed-acyclic-flow-graphs-2.yaml +++ /dev/null @@ -1,56 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below has been modified from the way it appears in -# docs/language/README.md: -# -# from ( -# pool PoolOne => op1 | op2 | ... -# pool PoolTwo => op1 | op2 | ... -# ) | join on key=key | ... -# -# Specifically, the "op1", "op2", and "..." have been filled in with real -# operations, and a field assignment has been added to the join -# (https://github.com/brimdata/zed/issues/2815). - -script: | - export ZED_LAKE=test - zed init -q - zed create -q -orderby color PoolOne - zed create -q -orderby price PoolTwo - zed load -q -use PoolOne fruit.zson - zed load -q -use PoolTwo prices.zson - zed query -z -I join.zed - -inputs: - - name: fruit.zson - data: | - {key:"apple",color:"red"} - {key:"banana",color:"yellow"} - {key:"avocado",color:"green"} - {key:"strawberry",color:"red"} - - name: prices.zson - data: | - {key:"apple",price:1.5} - {key:"banana",price:2.1} - {key:"avocado",price:3.} - {key:"strawberry",price:0.5} - - name: join.zed - data: | - from ( - pool PoolOne => put color:=upper(color) | put namelen:=len(key) | sort key - pool PoolTwo => put price:=price+0.5 | put tag:="mytag" | sort key - ) | join on key=key priceinfo:=this | drop priceinfo.key - -outputs: - - name: stdout - data: | - {key:"apple",color:"RED",namelen:5,priceinfo:{price:2.,tag:"mytag"}} - {key:"avocado",color:"GREEN",namelen:7,priceinfo:{price:3.5,tag:"mytag"}} - {key:"banana",color:"YELLOW",namelen:6,priceinfo:{price:2.6,tag:"mytag"}} - {key:"strawberry",color:"RED",namelen:10,priceinfo:{price:1.,tag:"mytag"}} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-directed-acyclic-flow-graphs-3.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-directed-acyclic-flow-graphs-3.yaml deleted file mode 100644 index 7e500821a..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-directed-acyclic-flow-graphs-3.yaml +++ /dev/null @@ -1,47 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below has been modified from the way it appears in -# docs/language/README.md: -# -# from ... | switch color ( -# case "red" => op1 | op2 | ... -# case "blue" => op1 | op2 | ... -# default => op1 | op2 | ... -# ) | ... -# -# Specifically, the "op1", "op2", and "..." have been filled in with real -# operations. - -script: | - export ZED_LAKE=test - zed init -q - zed create -q -orderby name fruit - zed load -q -use fruit fruit.zson - zed query -z -I switch.zed - -inputs: - - name: fruit.zson - data: | - {name:"apple",color:"red",price:1.5} - {name:"banana",color:"yellow",price:2.1} - {name:"blueberry",color:"blue",price:0.1} - - name: switch.zed - data: | - from fruit | switch color ( - case "red" => put price:=price+0.5 | put bigcolor:=upper(color) | put tag:="expensive" - case "blue" => put price:=price+0.1 | put colorlen:=len(color) | put tag:="cheaper" - default => put price:=price-0.1 | put promo:="discounted" | put tag:="promoted" - ) | sort name - -outputs: - - name: stdout - data: | - {name:"apple",color:"red",price:2.,bigcolor:"RED",tag:"expensive"} - {name:"banana",color:"yellow",price:2.,promo:"discounted",tag:"promoted"} - {name:"blueberry",color:"blue",price:0.2,colorlen:4,tag:"cheaper"} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-operators-1.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-operators-1.yaml deleted file mode 100644 index 72b3f0e48..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-operators-1.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -script: | - zc -C 'widget | count() by color | COLOR := upper(color)' - -outputs: - - name: stdout - data: | - search widget - | summarize - count() by color - | put COLOR:=upper(color) diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-sql-compatibility-1.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-sql-compatibility-1.yaml deleted file mode 100644 index d1542bc44..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-sql-compatibility-1.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below is exactly as it appears in the top-level -# docs/language/README.md. - -zed: | - SELECT count(), color - WHERE grep("widget") AND price > 1000 - GROUP BY color - HAVING count >= 10 - ORDER BY count - -input: | - {"color":"brown","widget":"kiwi","flavor":"sweet","price":1001} - {"color":"red","widget":"apple","flavor":"tart","price":1002} - {"color":"brown","widget":"coconut","flavor":"nutty","price":1003} - {"color":"brown","widget":"one","price":1004} - {"color":"brown","widget":"two","price":1005} - {"color":"brown","widget":"three","price":1006} - {"color":"brown","widget":"four","price":1007} - {"color":"brown","widget":"five","price":1008} - {"color":"brown","widget":"six","price":1009} - {"color":"brown","widget":"seven","price":1010} - {"color":"brown","widget":"eight","price":1011} - -output: | - {color:"brown",count:10(uint64)} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-sql-compatibility-2.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-sql-compatibility-2.yaml deleted file mode 100644 index 658788f45..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-sql-compatibility-2.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below is exactly as it appears in the top-level -# docs/language/README.md. - -zed: | - SELECT count(), color - WHERE grep("widget") AND price > 1000 - GROUP BY color - | count >= 10 | sort count - -input: | - {"color":"brown","widget":"kiwi","flavor":"sweet","price":1001} - {"color":"red","widget":"apple","flavor":"tart","price":1002} - {"color":"brown","widget":"coconut","flavor":"nutty","price":1003} - {"color":"brown","widget":"one","price":1004} - {"color":"brown","widget":"two","price":1005} - {"color":"brown","widget":"three","price":1006} - {"color":"brown","widget":"four","price":1007} - {"color":"brown","widget":"five","price":1008} - {"color":"brown","widget":"six","price":1009} - {"color":"brown","widget":"seven","price":1010} - {"color":"brown","widget":"eight","price":1011} - -output: | - {color:"brown",count:10(uint64)} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-sql-compatibility-3.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-sql-compatibility-3.yaml deleted file mode 100644 index 3b4e6d354..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-sql-compatibility-3.yaml +++ /dev/null @@ -1,39 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below has been modified from the way it appears in -# docs/language/README.md, as the "sort" is needed to produce deterministic -# test output from the aggregation. - -zed: | - not cidr_match(192.168.0.0/16,srcip) - | summarize - bytes := sum(src_bytes + dst_bytes), - maxdur := max(duration), - valid := and(status == "ok") - by srcip, dstip - | sort srcip, dstip - -input: | - {srcip:10.0.0.1,dstip:5.6.7.8,src_bytes:20,dst_bytes:40,status:"ok"} - {srcip:10.0.0.1,dstip:5.6.7.8,src_bytes:20,dst_bytes:40,duration:10} - {srcip:192.168.1.1,dstip:5.6.7.8,src_bytes:10,dst_bytes:30,duration:5,status:"ok"} - {srcip:10.0.0.1,dstip:9.10.11.12,src_bytes:25,dst_bytes:45,status:"ok"} - {srcip:10.0.0.1,dstip:9.10.11.12,src_bytes:20,dst_bytes:40,status:"failed"} - {srcip:10.0.0.1,dstip:13.14.15.16,src_bytes:29,dst_bytes:49} - {srcip:10.0.0.1,dstip:13.14.15.16,src_bytes:23,dst_bytes:43} - {srcip:10.0.0.1,src_bytes:23,dst_bytes:43} - {srcip:10.0.0.1,dstip:17.18.19.20,status:"ok"} - {srcip:10.0.0.1,dstip:17.18.19.20,status:"ok"} - -output: | - {srcip:10.0.0.1,dstip:5.6.7.8,bytes:120,maxdur:10,valid:true} - {srcip:10.0.0.1,dstip:9.10.11.12,bytes:130,maxdur:null,valid:false} - {srcip:10.0.0.1,dstip:13.14.15.16,bytes:144,maxdur:null,valid:null(bool)} - {srcip:10.0.0.1,dstip:17.18.19.20,bytes:null,maxdur:null,valid:true} - {srcip:10.0.0.1,dstip:error("missing"),bytes:66,maxdur:null,valid:null(bool)} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-tldr-1.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-tldr-1.yaml deleted file mode 100644 index 5eebef897..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-tldr-1.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below has been modified from the way it appears in -# docs/language/README.md, as the "sort" is needed to produce deterministic -# test output from the aggregation. - -zed: | - color=="brown" | put characters:=len(name) | count() by flavor,characters | sort - -input: | - {"color":"brown","name":"kiwi","flavor":"sweet"} - {"color":"red","name":"apple","flavor":"tart"} - {"color":"brown","name":"coconut","flavor":"nutty"} - -output: | - {flavor:"sweet",characters:4,count:1(uint64)} - {flavor:"nutty",characters:7,count:1(uint64)} diff --git a/versioned_docs/version-v1.1.0/language/ztests/language-tldr-2.yaml b/versioned_docs/version-v1.1.0/language/ztests/language-tldr-2.yaml deleted file mode 100644 index 91f34563d..000000000 --- a/versioned_docs/version-v1.1.0/language/ztests/language-tldr-2.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# ============================================================================ -# NOTE: This is a test to protect an example shown in the Zed language -# docs. If you need to make changes to the Zed below to make the tests pass -# again after a change, the docs likely need to be updated as well. -# -# See https://github.com/brimdata/zed/pull/2901 for details -# ============================================================================ - -# The Zed being tested below is exactly as it appears in the top-level -# docs/language/README.md. - -zed: | - put bigname:=upper(name) | not /^APPLE$/ - -input: | - {"color":"brown","name":"kiwi","flavor":"sweet"} - {"color":"red","name":"apple","flavor":"tart"} - {"color":"brown","name":"coconut","flavor":"nutty"} - -output: | - {color:"brown",name:"kiwi",flavor:"sweet",bigname:"KIWI"} - {color:"brown",name:"coconut",flavor:"nutty",bigname:"COCONUT"} diff --git a/versioned_docs/version-v1.1.0/libraries/README.md b/versioned_docs/version-v1.1.0/libraries/README.md deleted file mode 100644 index afdb909fc..000000000 --- a/versioned_docs/version-v1.1.0/libraries/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Libraries - -Zed currently supports a small number of languages -with client libraries for manipulating Zed data and interacting -with a Zed service via the remote API. - -Our documentation for client libraries is early but will -be improved as the project develops. - -We plan to support a broad range of languages. Open source contributions -are welcome. Give us a holler on [Slack](https://www.brimdata.io/join-slack/) -if you would like help or guidance on developing a Zed library. diff --git a/versioned_docs/version-v1.1.0/libraries/_category_.yaml b/versioned_docs/version-v1.1.0/libraries/_category_.yaml deleted file mode 100644 index 0c2cd30fc..000000000 --- a/versioned_docs/version-v1.1.0/libraries/_category_.yaml +++ /dev/null @@ -1,2 +0,0 @@ -position: 8 -label: Libraries diff --git a/versioned_docs/version-v1.1.0/libraries/go.md b/versioned_docs/version-v1.1.0/libraries/go.md deleted file mode 100644 index 9949ee484..000000000 --- a/versioned_docs/version-v1.1.0/libraries/go.md +++ /dev/null @@ -1,193 +0,0 @@ -# Go - -The Zed system was developed in Go so support for Go clients is -fairly comprehensive. That said, the code-embedded documentation of exported -package functions is scant and we are actively working to document -the functions of the key Go packages. - -Also, our focus for the Go client packages has been on supporting -the core Zed implementation. We intend to develop a Go package that -is easier to use for external clients. In the meantime, clients -may use the internal Go packages though the APIs are subject to change. - -## Installation - -The Zed system is structured as a standard Go module so its easy to import into -other Go projects straight from the GitHub repo. - -Some of the key packages are: - -* [zed](https://pkg.go.dev/github.com/brimdata/zed) - core Zed values and types -* [zson](https://pkg.go.dev/github.com/brimdata/zed/zson) - ZSON support -* [zio](https://pkg.go.dev/github.com/brimdata/zed/zio) - I/O interfaces for Zed following the Reader/Writer patterns -* [zio/zsonio](https://pkg.go.dev/github.com/brimdata/zed/zio/zsonio) - ZSON reader/writer -* [zio/zngio](https://pkg.go.dev/github.com/brimdata/zed/zio/zngio) - ZNG reader/writer -* [lake/api](https://pkg.go.dev/github.com/brimdata/zed/lake/api) - interact with a Zed Lake - -To install in your local Go project, simply run: -``` -go get github.com/brimdata/zed -``` - -## Examples - -### ZSON Reader - -Read ZSON from stdin, derefence field `s`, and print results: -``` -package main - -import ( - "fmt" - "log" - "os" - - "github.com/brimdata/zed" - "github.com/brimdata/zed/zio/zsonio" - "github.com/brimdata/zed/zson" -) - -func main() { - zctx := zed.NewContext() - reader := zsonio.NewReader(os.Stdin, zctx) - for { - val, err := reader.Read() - if err != nil { - log.Fatalln(err) - } - if val == nil { - return - } - s := val.Deref("s") - if s == nil { - s = zctx.Missing() - } - fmt.Println(zson.String(s)) - } -} -``` -To build, create a directory for the main package, initialize it, -copy the above code into main.go, fetch the quired zed packages. -``` -mkdir example -cd example -cat > main.go < [paste from above] -go get github.com/brimdata/zed -go get github.com/brimdata/zson -go get github.com/brimdata/zio/zsonion -``` -To run type: -``` -echo '{s:"hello"}{x:123}{s:"world"}' | go run . -``` -which produces -``` -"hello" -error("missing") -"world" -``` - -### Local Lake Reader - -This example interacts with a Zed lake. Note that it is straightforward -to support both direct access to a lake via the files (or S3 URL) as well as -access to a lake via a service endpoint. - -First, we'll use `zed` to create a lake and load the example data: -``` -zed init -lake scratch -zed create -lake scratch Demo -echo '{s:"hello, world"}{x:1}{s:"good bye"}' | zed load -lake scratch -use Demo - -``` -Now replace main.go with this code: -``` -package main - -import ( - "context" - "fmt" - "log" - "os" - - "github.com/brimdata/zed" - "github.com/brimdata/zed/lake/api" - "github.com/brimdata/zed/pkg/storage" - "github.com/brimdata/zed/zson" -) - -func main() { - if len(os.Args) != 2 { - log.Fatalln("URI of Zed lake not provided") - } - uri, err := storage.ParseURI(os.Args[1]) - if err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } - ctx := context.TODO() - zctx := zed.NewContext() - var lake api.Interface - if api.IsLakeService(uri) { - lake, err = api.OpenRemoteLake(ctx, uri.String()) - } else { - lake, err = api.OpenLocalLake(ctx, uri) - } - if err != nil { - log.Fatalln("URI of Zed lake not provided") - } - reader, err := lake.Query(ctx, nil, "from Demo") - if err != nil { - log.Fatalln("URI of Zed lake not provided") - } - defer reader.Close() - for { - val, err := reader.Read() - if err != nil { - log.Fatalln("URI of Zed lake not provided") - } - if val == nil { - return - } - s := val.Deref("s") - if s == nil { - s = zctx.Missing() - } - fmt.Println(zson.String(s)) - } -} -``` -Now, run this command to interact with the lake via the local file system: -``` -go run . ./scratch -``` -which should output -``` -{s:"hello, world"} -{s:"good bye"} -{x:1} -``` -Note that the order of data has changed because the Zed lake stores data -in a sorted order. Since we did not specify a "pool key" when we created -the lake, it ends up sorting the data by `this`. - -### Lake Service Reader - -We can use the same code above to talk to a Zed lake server. All we do is -give it the URI of the service, which by default is on port 9867. - -To try this out, first run a Zed service on the scratch lake we created -above: -``` -zed serve -lake ./scratch -``` -Finally, in another local shell, run the Go program and specify the servie -endpoint we just created: -``` -go run . http://localhost:9867 -``` -and you should again get this result: -``` -"hello, world" -"good bye" -error("missing") -``` diff --git a/versioned_docs/version-v1.1.0/libraries/javascript.md b/versioned_docs/version-v1.1.0/libraries/javascript.md deleted file mode 100644 index 770e8c160..000000000 --- a/versioned_docs/version-v1.1.0/libraries/javascript.md +++ /dev/null @@ -1,21 +0,0 @@ -# Javascript - -The [zed-js library](https://github.com/brimdata/zealot/tree/main/packages/zed-js) -provides support for the Zed data model from within -Javascript as well as methods for communicating with a Zed lake. - -Because JavaScript's native type system is limtied, zed-js provides -implementations for each of Zed's primitive types as well as -technique for interpreting and/or constructing arbitrary complex types. - -## Installation - -Documentation coming soon. - -## Library API - -Documentation coming soon. - -## Examples - -Examples coming soon. diff --git a/versioned_docs/version-v1.1.0/libraries/python.md b/versioned_docs/version-v1.1.0/libraries/python.md deleted file mode 100644 index e3642dce9..000000000 --- a/versioned_docs/version-v1.1.0/libraries/python.md +++ /dev/null @@ -1,69 +0,0 @@ -# Python - -Zed includes preliminary support for Python-based interaction -with a Zed lake. -The Zed Python package supports loading data into a Zed lake as well as -querying and retrieving results in the [ZJSON format](../formats/zjson.md). -The Python client interacts with the Zed lake via the REST API served by -[`zed serve`](../commands/zed.md#213-serve). - -This approach works adequately when high data throughput is not required. -We will soon introduce native [ZNG](../formats/zng.md) support for -Python that should increase performance substantially for more -data intensive workloads. - -## Installation - -Install the latest version like this: -```sh -pip3 install "git+https://github.com/brimdata/zed#subdirectory=python/zed" -``` - -Install the version compatible with a local `zed` like this: -```sh -pip3 install "git+https://github.com/brimdata/zed@$(zed -version | cut -d ' ' -f 2)#subdirectory=python/zed" -``` - -## Example - -To run this example, first start a Zed lake service from your shell: -```sh -zed init -lake scratch -zed serve -lake scratch -``` -> Or you can launch the [Brim app](https://github.com/brimdata/brim) and it will run a Zed lake service -> on the default port at `http://localhost:9867`. - -Then, in another shell, use Python to create a pool, load some data, -and run a query: -```sh -python3 < sort flavor - file people.ndjson => sort likes -) | inner join on flavor=likes eater:=name -``` - -Executing the Zed script: -```mdtest-command -zq -z -I inner-join.zed -``` -produces -```mdtest-output -{name:"figs",color:"brown",flavor:"plain",eater:"jessie"} -{name:"banana",color:"yellow",flavor:"sweet",eater:"quinn"} -{name:"strawberry",color:"red",flavor:"sweet",eater:"quinn"} -{name:"dates",color:"brown",flavor:"sweet",note:"in season",eater:"quinn"} -{name:"apple",color:"red",flavor:"tart",eater:"morgan"} -{name:"apple",color:"red",flavor:"tart",eater:"chris"} -``` - -## Left Join - -:::tip note -In some databases a left join is called a _left outer join_. -::: - -By performing a left join that targets the same key fields, now all of our -fruits will be shown in the results even if no one likes them (e.g., `avocado`). - -As another variation, we'll also copy over the age of the matching person. By -referencing only the field name rather than using `:=` for assignment, the -original field name `age` is maintained in the results. - -The Zed script `left-join.zed`: -```mdtest-input left-join.zed -from ( - file fruit.ndjson => sort flavor - file people.ndjson => sort likes -) | left join on flavor=likes eater:=name,age -``` - -Executing the Zed script: - -```mdtest-command -zq -z -I left-join.zed -``` -produces -```mdtest-output -{name:"figs",color:"brown",flavor:"plain",eater:"jessie",age:30} -{name:"avocado",color:"green",flavor:"savory"} -{name:"banana",color:"yellow",flavor:"sweet",eater:"quinn",age:14} -{name:"strawberry",color:"red",flavor:"sweet",eater:"quinn",age:14} -{name:"dates",color:"brown",flavor:"sweet",note:"in season",eater:"quinn",age:14} -{name:"apple",color:"red",flavor:"tart",eater:"morgan",age:61} -{name:"apple",color:"red",flavor:"tart",eater:"chris",age:47} -``` - -## Right join - -:::tip note -In some databases a right join is called a _right outer join_. -::: - -Next we'll change the join type from `left` to `right`. Notice that this causes -the `note` field from the right-hand input to appear in the joined results. - -The Zed script `right-join.zed`: -```mdtest-input right-join.zed -from ( - file fruit.ndjson => sort flavor - file people.ndjson => sort likes -) | right join on flavor=likes fruit:=name -``` -Executing the Zed script: -```mdtest-command -zq -z -I right-join.zed -``` -produces -```mdtest-output -{name:"jessie",age:30,likes:"plain",fruit:"figs"} -{name:"quinn",age:14,likes:"sweet",note:"many kids enjoy sweets",fruit:"banana"} -{name:"quinn",age:14,likes:"sweet",note:"many kids enjoy sweets",fruit:"strawberry"} -{name:"quinn",age:14,likes:"sweet",note:"many kids enjoy sweets",fruit:"dates"} -{name:"morgan",age:61,likes:"tart",fruit:"apple"} -{name:"chris",age:47,likes:"tart",fruit:"apple"} -``` - -## Inputs from Pools - -As our prior examples all used `zq`, we used `file` in our `from()` block to -pull our respective inputs from named file sources. However, if the inputs are -stored in pools in a Zed lake, the pool names would instead be specified in the -`from()` block. - -Here we'll load our input data to pools in a temporary Zed Lake, then execute -our inner join using `zed query`. - -Notice that because we happened to use `-orderby` to sort our pools by the same -keys that we reference in our `join`, we did not need to use any explicit -upstream `sort`. - -The Zed script `inner-join-pools.zed`: - -```mdtest-input inner-join-pools.zed -from ( - pool fruit - pool people -) | inner join on flavor=likes eater:=name -``` - -Populating the pools, then executing the Zed script: - -```mdtest-command -export ZED_LAKE=lake -zed init -q -zed create -q -orderby flavor:asc fruit -zed create -q -orderby likes:asc people -zed load -q -use fruit fruit.ndjson -zed load -q -use people people.ndjson -zed query -z -I inner-join-pools.zed -``` -produces -```mdtest-output -{name:"figs",color:"brown",flavor:"plain",eater:"jessie"} -{name:"dates",color:"brown",flavor:"sweet",note:"in season",eater:"quinn"} -{name:"banana",color:"yellow",flavor:"sweet",eater:"quinn"} -{name:"strawberry",color:"red",flavor:"sweet",eater:"quinn"} -{name:"apple",color:"red",flavor:"tart",eater:"chris"} -{name:"apple",color:"red",flavor:"tart",eater:"morgan"} -``` - -## Self Joins - -In addition to the named files and pools like we've used in the prior examples, -Zed is also intended to work on a single sequence of data that is split -and joined to itself. Here we'll combine our file -sources into a stream that we'll pipe into `zq` via stdin. Because `join` requires -two separate inputs, here we'll use the `has()` function to identify the -records in the stream that will be treated as the left and right sides. - -The Zed script `inner-join-streamed.zed`: - -```mdtest-input inner-join-streamed.zed -switch ( - case has(color) => sort flavor - case has(age) => sort likes -) | inner join on flavor=likes eater:=name -``` - -Executing the Zed script: -```mdtest-command -cat fruit.ndjson people.ndjson | zq -z -I inner-join-streamed.zed - -``` -produces -```mdtest-output -{name:"figs",color:"brown",flavor:"plain",eater:"jessie"} -{name:"banana",color:"yellow",flavor:"sweet",eater:"quinn"} -{name:"strawberry",color:"red",flavor:"sweet",eater:"quinn"} -{name:"dates",color:"brown",flavor:"sweet",note:"in season",eater:"quinn"} -{name:"apple",color:"red",flavor:"tart",eater:"morgan"} -{name:"apple",color:"red",flavor:"tart",eater:"chris"} -``` - -## Multi-value Joins - -The equality test in a Zed `join` accepts only one named key from each input. -However, joins on multiple matching values can still be performed by making the -values available in comparable complex types, such as embedded records. - -To illustrate this, we'll introduce some new input data `inventory.ndjson` -that represents a vendor's available quantity of fruit for sale. As the colors -indicate, they separately offer both ripe and unripe fruit. - -```mdtest-input inventory.ndjson -{"name":"banana","color":"yellow","quantity":1000} -{"name":"banana","color":"green","quantity":5000} -{"name":"strawberry","color":"red","quantity":3000} -{"name":"strawberry","color":"white","quantity":6000} -``` - -Let's assume we're interested in seeing the available quantities of only the -ripe fruit in our `fruit.ndjson` -records. In the Zed script `multi-value-join.zed`, we create the keys as -embedded records inside each input record, using the same field names and data -types in each. We'll leave the created `fruitkey` records intact to show what -they look like, but since it represents redundant data, in practice we'd -typically [`drop`](../language/operators/drop.md) it after the `join` in our Zed pipeline. - -```mdtest-input multi-value-join.zed -from ( - file fruit.ndjson => put fruitkey:={name,color} | sort fruitkey - file inventory.ndjson => put invkey:={name,color} | sort invkey -) | inner join on fruitkey=invkey quantity -``` - -Executing the Zed script: -```mdtest-command -zq -z -I multi-value-join.zed -``` -produces -```mdtest-output -{name:"banana",color:"yellow",flavor:"sweet",fruitkey:{name:"banana",color:"yellow"},quantity:1000} -{name:"strawberry",color:"red",flavor:"sweet",fruitkey:{name:"strawberry",color:"red"},quantity:3000} -``` - -## Embedding the entire opposite record - -In the current `join` implementation, explicit entries must be provided in the -`[field-list]` in order to copy values from the opposite input into the joined -results (a possible future enhancement [zed/2815](https://github.com/brimdata/zed/issues/2815) -may improve upon this). This can be cumbersome if your goal is to copy over many -fields or you don't know the names of all desired fields. - -One way to work around this limitation is to specify `this` in the field list -to copy the contents of the _entire_ opposite record into an embedded record -in the result. - -The Zed script `embed-opposite.zed`: - -```mdtest-input embed-opposite.zed -from ( - file fruit.ndjson => sort flavor - file people.ndjson => sort likes -) | inner join on flavor=likes eaterinfo:=this -``` - -Executing the Zed script: - -```mdtest-command -zq -z -I embed-opposite.zed -``` -produces -```mdtest-output -{name:"figs",color:"brown",flavor:"plain",eaterinfo:{name:"jessie",age:30,likes:"plain"}} -{name:"banana",color:"yellow",flavor:"sweet",eaterinfo:{name:"quinn",age:14,likes:"sweet",note:"many kids enjoy sweets"}} -{name:"strawberry",color:"red",flavor:"sweet",eaterinfo:{name:"quinn",age:14,likes:"sweet",note:"many kids enjoy sweets"}} -{name:"dates",color:"brown",flavor:"sweet",note:"in season",eaterinfo:{name:"quinn",age:14,likes:"sweet",note:"many kids enjoy sweets"}} -{name:"apple",color:"red",flavor:"tart",eaterinfo:{name:"morgan",age:61,likes:"tart"}} -{name:"apple",color:"red",flavor:"tart",eaterinfo:{name:"chris",age:47,likes:"tart"}} -``` diff --git a/versioned_docs/version-v1.1.0/tutorials/prs.json b/versioned_docs/version-v1.1.0/tutorials/prs.json deleted file mode 100644 index fd6403ee2..000000000 --- a/versioned_docs/version-v1.1.0/tutorials/prs.json +++ /dev/null @@ -1 +0,0 @@ -[{"url":"https://api.github.com/repos/brimdata/zed/pulls/1","id":339590033,"node_id":"MDExOlB1bGxSZXF1ZXN0MzM5NTkwMDMz","html_url":"https://github.com/brimdata/zed/pull/1","diff_url":"https://github.com/brimdata/zed/pull/1.diff","patch_url":"https://github.com/brimdata/zed/pull/1.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/1","number":1,"state":"closed","locked":false,"title":"Make \"make\" work in zq","user":{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false},"body":"Add a basic Makefile plus go.sum for dependencies","created_at":"2019-11-11T19:50:46Z","updated_at":"2019-11-11T20:00:25Z","closed_at":"2019-11-11T20:00:22Z","merged_at":"2019-11-11T20:00:22Z","merge_commit_sha":"5e581b3fc6390b3d122f865dcf4038a734b64e7c","assignee":null,"assignees":[],"requested_reviewers":[{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},{"login":"nwt","id":2574448,"node_id":"MDQ6VXNlcjI1NzQ0NDg=","avatar_url":"https://avatars.githubusercontent.com/u/2574448?v=4","gravatar_id":"","url":"https://api.github.com/users/nwt","html_url":"https://github.com/nwt","followers_url":"https://api.github.com/users/nwt/followers","following_url":"https://api.github.com/users/nwt/following{/other_user}","gists_url":"https://api.github.com/users/nwt/gists{/gist_id}","starred_url":"https://api.github.com/users/nwt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nwt/subscriptions","organizations_url":"https://api.github.com/users/nwt/orgs","repos_url":"https://api.github.com/users/nwt/repos","events_url":"https://api.github.com/users/nwt/events{/privacy}","received_events_url":"https://api.github.com/users/nwt/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/1/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/1/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/1/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/70b549e924d16d150dd5634130e6876377fc3c73","head":{"label":"brimdata:make","ref":"make","sha":"70b549e924d16d150dd5634130e6876377fc3c73","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"5fc47f71c7f9b130c3bcd4a2d377735349fd39a9","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/1"},"html":{"href":"https://github.com/brimdata/zed/pull/1"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/1"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/70b549e924d16d150dd5634130e6876377fc3c73"}},"author_association":"NONE","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/2","id":339613712,"node_id":"MDExOlB1bGxSZXF1ZXN0MzM5NjEzNzEy","html_url":"https://github.com/brimdata/zed/pull/2","diff_url":"https://github.com/brimdata/zed/pull/2.diff","patch_url":"https://github.com/brimdata/zed/pull/2.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/2","number":2,"state":"closed","locked":false,"title":"fix install target","user":{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false},"body":"","created_at":"2019-11-11T20:57:12Z","updated_at":"2019-11-11T21:00:26Z","closed_at":"2019-11-11T21:00:15Z","merged_at":"2019-11-11T21:00:15Z","merge_commit_sha":"08b7980d3c20112baea2c11b633afc60b9b772d0","assignee":null,"assignees":[],"requested_reviewers":[{"login":"henridf","id":1022041,"node_id":"MDQ6VXNlcjEwMjIwNDE=","avatar_url":"https://avatars.githubusercontent.com/u/1022041?v=4","gravatar_id":"","url":"https://api.github.com/users/henridf","html_url":"https://github.com/henridf","followers_url":"https://api.github.com/users/henridf/followers","following_url":"https://api.github.com/users/henridf/following{/other_user}","gists_url":"https://api.github.com/users/henridf/gists{/gist_id}","starred_url":"https://api.github.com/users/henridf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henridf/subscriptions","organizations_url":"https://api.github.com/users/henridf/orgs","repos_url":"https://api.github.com/users/henridf/repos","events_url":"https://api.github.com/users/henridf/events{/privacy}","received_events_url":"https://api.github.com/users/henridf/received_events","type":"User","site_admin":false},{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},{"login":"nwt","id":2574448,"node_id":"MDQ6VXNlcjI1NzQ0NDg=","avatar_url":"https://avatars.githubusercontent.com/u/2574448?v=4","gravatar_id":"","url":"https://api.github.com/users/nwt","html_url":"https://github.com/nwt","followers_url":"https://api.github.com/users/nwt/followers","following_url":"https://api.github.com/users/nwt/following{/other_user}","gists_url":"https://api.github.com/users/nwt/gists{/gist_id}","starred_url":"https://api.github.com/users/nwt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nwt/subscriptions","organizations_url":"https://api.github.com/users/nwt/orgs","repos_url":"https://api.github.com/users/nwt/repos","events_url":"https://api.github.com/users/nwt/events{/privacy}","received_events_url":"https://api.github.com/users/nwt/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/2/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/2/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/2/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/8a16ffa1dfb5e3a449921a717fb69c30ac629b0e","head":{"label":"brimdata:fix-install","ref":"fix-install","sha":"8a16ffa1dfb5e3a449921a717fb69c30ac629b0e","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"5e581b3fc6390b3d122f865dcf4038a734b64e7c","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/2"},"html":{"href":"https://github.com/brimdata/zed/pull/2"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/2"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/2/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/2/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/2/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/8a16ffa1dfb5e3a449921a717fb69c30ac629b0e"}},"author_association":"NONE","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/3","id":339659206,"node_id":"MDExOlB1bGxSZXF1ZXN0MzM5NjU5MjA2","html_url":"https://github.com/brimdata/zed/pull/3","diff_url":"https://github.com/brimdata/zed/pull/3.diff","patch_url":"https://github.com/brimdata/zed/pull/3.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/3","number":3,"state":"closed","locked":false,"title":"import github.com/looky-cloud/lookytalk","user":{"login":"nwt","id":2574448,"node_id":"MDQ6VXNlcjI1NzQ0NDg=","avatar_url":"https://avatars.githubusercontent.com/u/2574448?v=4","gravatar_id":"","url":"https://api.github.com/users/nwt","html_url":"https://github.com/nwt","followers_url":"https://api.github.com/users/nwt/followers","following_url":"https://api.github.com/users/nwt/following{/other_user}","gists_url":"https://api.github.com/users/nwt/gists{/gist_id}","starred_url":"https://api.github.com/users/nwt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nwt/subscriptions","organizations_url":"https://api.github.com/users/nwt/orgs","repos_url":"https://api.github.com/users/nwt/repos","events_url":"https://api.github.com/users/nwt/events{/privacy}","received_events_url":"https://api.github.com/users/nwt/received_events","type":"User","site_admin":false},"body":"I'm not sure I've got everything in the best location, so weigh in if you have an opinion.\r\n\r\nI'm also not sure about package.json. It's just enough to make `import ZQL from \"zq/zql/zql.js\"` work over in looky-cloud/desktop.","created_at":"2019-11-11T23:24:00Z","updated_at":"2019-11-15T17:28:53Z","closed_at":"2019-11-12T16:33:57Z","merged_at":"2019-11-12T16:33:57Z","merge_commit_sha":"ae079ca9dd72e2aec938ff7c9af846e1d736c60a","assignee":null,"assignees":[],"requested_reviewers":[{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/3/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/3/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/3/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/6492fa177ff0d1d5f21f1e807f79507b0e4397be","head":{"label":"brimdata:zql","ref":"zql","sha":"6492fa177ff0d1d5f21f1e807f79507b0e4397be","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"08b7980d3c20112baea2c11b633afc60b9b772d0","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/3"},"html":{"href":"https://github.com/brimdata/zed/pull/3"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/3"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/3/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/3/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/3/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/6492fa177ff0d1d5f21f1e807f79507b0e4397be"}},"author_association":"MEMBER","auto_merge":null,"active_lock_reason":null},{},{"url":"https://api.github.com/repos/brimdata/zed/pulls/5","id":339995290,"node_id":"MDExOlB1bGxSZXF1ZXN0MzM5OTk1Mjkw","html_url":"https://github.com/brimdata/zed/pull/5","diff_url":"https://github.com/brimdata/zed/pull/5.diff","patch_url":"https://github.com/brimdata/zed/pull/5.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/5","number":5,"state":"closed","locked":false,"title":"Make zq -f work","user":{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false},"body":"","created_at":"2019-11-12T16:25:46Z","updated_at":"2019-11-12T16:50:19Z","closed_at":"2019-11-12T16:50:14Z","merged_at":"2019-11-12T16:50:14Z","merge_commit_sha":"2d29d5794a17609e71b262b3b0ea61a87d4cfd2f","assignee":null,"assignees":[],"requested_reviewers":[{"login":"henridf","id":1022041,"node_id":"MDQ6VXNlcjEwMjIwNDE=","avatar_url":"https://avatars.githubusercontent.com/u/1022041?v=4","gravatar_id":"","url":"https://api.github.com/users/henridf","html_url":"https://github.com/henridf","followers_url":"https://api.github.com/users/henridf/followers","following_url":"https://api.github.com/users/henridf/following{/other_user}","gists_url":"https://api.github.com/users/henridf/gists{/gist_id}","starred_url":"https://api.github.com/users/henridf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henridf/subscriptions","organizations_url":"https://api.github.com/users/henridf/orgs","repos_url":"https://api.github.com/users/henridf/repos","events_url":"https://api.github.com/users/henridf/events{/privacy}","received_events_url":"https://api.github.com/users/henridf/received_events","type":"User","site_admin":false},{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/5/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/5/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/5/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/d380d530df546538d2eb33193563a5785112c1e0","head":{"label":"brimdata:output-format","ref":"output-format","sha":"d380d530df546538d2eb33193563a5785112c1e0","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"68eb0944256cbe33d918bd43053c16bbf6dcb7c4","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/5"},"html":{"href":"https://github.com/brimdata/zed/pull/5"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/5"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/5/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/5/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/5/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/d380d530df546538d2eb33193563a5785112c1e0"}},"author_association":"NONE","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/6","id":340006609,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQwMDA2NjA5","html_url":"https://github.com/brimdata/zed/pull/6","diff_url":"https://github.com/brimdata/zed/pull/6.diff","patch_url":"https://github.com/brimdata/zed/pull/6.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/6","number":6,"state":"closed","locked":false,"title":"a few clarifications to the zson spec","user":{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false},"body":"","created_at":"2019-11-12T16:49:07Z","updated_at":"2019-11-12T18:07:57Z","closed_at":"2019-11-12T18:07:54Z","merged_at":"2019-11-12T18:07:54Z","merge_commit_sha":"415534f9981684d2cacae26a3e5c13c75b397bab","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/6/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/6/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/6/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/62297adefaaa7c1ba684dce9ba318e7efe77170b","head":{"label":"brimdata:zson-spec-clarifications","ref":"zson-spec-clarifications","sha":"62297adefaaa7c1ba684dce9ba318e7efe77170b","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"ae079ca9dd72e2aec938ff7c9af846e1d736c60a","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/6"},"html":{"href":"https://github.com/brimdata/zed/pull/6"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/6"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/6/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/6/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/6/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/62297adefaaa7c1ba684dce9ba318e7efe77170b"}},"author_association":"NONE","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/7","id":340016474,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQwMDE2NDc0","html_url":"https://github.com/brimdata/zed/pull/7","diff_url":"https://github.com/brimdata/zed/pull/7.diff","patch_url":"https://github.com/brimdata/zed/pull/7.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/7","number":7,"state":"closed","locked":false,"title":"Fix default format","user":{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false},"body":"PR #5 wired up zsio.LookupWriter() to the -f argument but overlooked\r\nthe fact that the default value for -f is \"text\" and we don't have a\r\ntext writer. Fix it for now by making \"table\" the default.","created_at":"2019-11-12T17:10:26Z","updated_at":"2019-11-13T17:55:46Z","closed_at":"2019-11-13T17:55:42Z","merged_at":"2019-11-13T17:55:42Z","merge_commit_sha":"5f7c169979d6d0bfc1781ec2aac3666ddb22c669","assignee":null,"assignees":[],"requested_reviewers":[{"login":"henridf","id":1022041,"node_id":"MDQ6VXNlcjEwMjIwNDE=","avatar_url":"https://avatars.githubusercontent.com/u/1022041?v=4","gravatar_id":"","url":"https://api.github.com/users/henridf","html_url":"https://github.com/henridf","followers_url":"https://api.github.com/users/henridf/followers","following_url":"https://api.github.com/users/henridf/following{/other_user}","gists_url":"https://api.github.com/users/henridf/gists{/gist_id}","starred_url":"https://api.github.com/users/henridf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henridf/subscriptions","organizations_url":"https://api.github.com/users/henridf/orgs","repos_url":"https://api.github.com/users/henridf/repos","events_url":"https://api.github.com/users/henridf/events{/privacy}","received_events_url":"https://api.github.com/users/henridf/received_events","type":"User","site_admin":false},{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/7/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/7/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/7/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/11ea4ae495f898c9c578e3ab822279f6453a5de6","head":{"label":"brimdata:fix-format-again","ref":"fix-format-again","sha":"11ea4ae495f898c9c578e3ab822279f6453a5de6","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"2d29d5794a17609e71b262b3b0ea61a87d4cfd2f","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/7"},"html":{"href":"https://github.com/brimdata/zed/pull/7"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/7"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/7/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/7/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/7/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/11ea4ae495f898c9c578e3ab822279f6453a5de6"}},"author_association":"NONE","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/8","id":340044364,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQwMDQ0MzY0","html_url":"https://github.com/brimdata/zed/pull/8","diff_url":"https://github.com/brimdata/zed/pull/8.diff","patch_url":"https://github.com/brimdata/zed/pull/8.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/8","number":8,"state":"closed","locked":false,"title":"Get the ball rolling with some simple ci","user":{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false},"body":"","created_at":"2019-11-12T18:17:15Z","updated_at":"2019-11-12T18:26:19Z","closed_at":"2019-11-12T18:26:16Z","merged_at":"2019-11-12T18:26:16Z","merge_commit_sha":"6a1e49f7ffaf3139ab1502cf9c4bc3c6747c0cf0","assignee":null,"assignees":[],"requested_reviewers":[{"login":"henridf","id":1022041,"node_id":"MDQ6VXNlcjEwMjIwNDE=","avatar_url":"https://avatars.githubusercontent.com/u/1022041?v=4","gravatar_id":"","url":"https://api.github.com/users/henridf","html_url":"https://github.com/henridf","followers_url":"https://api.github.com/users/henridf/followers","following_url":"https://api.github.com/users/henridf/following{/other_user}","gists_url":"https://api.github.com/users/henridf/gists{/gist_id}","starred_url":"https://api.github.com/users/henridf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henridf/subscriptions","organizations_url":"https://api.github.com/users/henridf/orgs","repos_url":"https://api.github.com/users/henridf/repos","events_url":"https://api.github.com/users/henridf/events{/privacy}","received_events_url":"https://api.github.com/users/henridf/received_events","type":"User","site_admin":false},{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},{"login":"nwt","id":2574448,"node_id":"MDQ6VXNlcjI1NzQ0NDg=","avatar_url":"https://avatars.githubusercontent.com/u/2574448?v=4","gravatar_id":"","url":"https://api.github.com/users/nwt","html_url":"https://github.com/nwt","followers_url":"https://api.github.com/users/nwt/followers","following_url":"https://api.github.com/users/nwt/following{/other_user}","gists_url":"https://api.github.com/users/nwt/gists{/gist_id}","starred_url":"https://api.github.com/users/nwt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nwt/subscriptions","organizations_url":"https://api.github.com/users/nwt/orgs","repos_url":"https://api.github.com/users/nwt/repos","events_url":"https://api.github.com/users/nwt/events{/privacy}","received_events_url":"https://api.github.com/users/nwt/received_events","type":"User","site_admin":false},{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/8/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/8/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/8/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/1d11f9829f4f20f028356cf4a45b97b2974bf4b5","head":{"label":"brimdata:ci","ref":"ci","sha":"1d11f9829f4f20f028356cf4a45b97b2974bf4b5","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"415534f9981684d2cacae26a3e5c13c75b397bab","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/8"},"html":{"href":"https://github.com/brimdata/zed/pull/8"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/8"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/8/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/8/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/8/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/1d11f9829f4f20f028356cf4a45b97b2974bf4b5"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/9","id":340050393,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQwMDUwMzkz","html_url":"https://github.com/brimdata/zed/pull/9","diff_url":"https://github.com/brimdata/zed/pull/9.diff","patch_url":"https://github.com/brimdata/zed/pull/9.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/9","number":9,"state":"closed","locked":false,"title":"Add status badges to readme","user":{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false},"body":"We got godoc and circle ci status","created_at":"2019-11-12T18:32:16Z","updated_at":"2019-11-12T18:38:50Z","closed_at":"2019-11-12T18:38:45Z","merged_at":"2019-11-12T18:38:45Z","merge_commit_sha":"c9b95c4697ca66446db189342c1228a4d7055fe7","assignee":null,"assignees":[],"requested_reviewers":[{"login":"henridf","id":1022041,"node_id":"MDQ6VXNlcjEwMjIwNDE=","avatar_url":"https://avatars.githubusercontent.com/u/1022041?v=4","gravatar_id":"","url":"https://api.github.com/users/henridf","html_url":"https://github.com/henridf","followers_url":"https://api.github.com/users/henridf/followers","following_url":"https://api.github.com/users/henridf/following{/other_user}","gists_url":"https://api.github.com/users/henridf/gists{/gist_id}","starred_url":"https://api.github.com/users/henridf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henridf/subscriptions","organizations_url":"https://api.github.com/users/henridf/orgs","repos_url":"https://api.github.com/users/henridf/repos","events_url":"https://api.github.com/users/henridf/events{/privacy}","received_events_url":"https://api.github.com/users/henridf/received_events","type":"User","site_admin":false},{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},{"login":"nwt","id":2574448,"node_id":"MDQ6VXNlcjI1NzQ0NDg=","avatar_url":"https://avatars.githubusercontent.com/u/2574448?v=4","gravatar_id":"","url":"https://api.github.com/users/nwt","html_url":"https://github.com/nwt","followers_url":"https://api.github.com/users/nwt/followers","following_url":"https://api.github.com/users/nwt/following{/other_user}","gists_url":"https://api.github.com/users/nwt/gists{/gist_id}","starred_url":"https://api.github.com/users/nwt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nwt/subscriptions","organizations_url":"https://api.github.com/users/nwt/orgs","repos_url":"https://api.github.com/users/nwt/repos","events_url":"https://api.github.com/users/nwt/events{/privacy}","received_events_url":"https://api.github.com/users/nwt/received_events","type":"User","site_admin":false},{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false},{"login":"philrz","id":5934157,"node_id":"MDQ6VXNlcjU5MzQxNTc=","avatar_url":"https://avatars.githubusercontent.com/u/5934157?v=4","gravatar_id":"","url":"https://api.github.com/users/philrz","html_url":"https://github.com/philrz","followers_url":"https://api.github.com/users/philrz/followers","following_url":"https://api.github.com/users/philrz/following{/other_user}","gists_url":"https://api.github.com/users/philrz/gists{/gist_id}","starred_url":"https://api.github.com/users/philrz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/philrz/subscriptions","organizations_url":"https://api.github.com/users/philrz/orgs","repos_url":"https://api.github.com/users/philrz/repos","events_url":"https://api.github.com/users/philrz/events{/privacy}","received_events_url":"https://api.github.com/users/philrz/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/9/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/9/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/9/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/189e3f0736f59002022696ab7052d0f16ff9ea9b","head":{"label":"brimdata:status-badges","ref":"status-badges","sha":"189e3f0736f59002022696ab7052d0f16ff9ea9b","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"6a1e49f7ffaf3139ab1502cf9c4bc3c6747c0cf0","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/9"},"html":{"href":"https://github.com/brimdata/zed/pull/9"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/9"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/9/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/9/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/9/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/189e3f0736f59002022696ab7052d0f16ff9ea9b"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/10","id":340152512,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQwMTUyNTEy","html_url":"https://github.com/brimdata/zed/pull/10","diff_url":"https://github.com/brimdata/zed/pull/10.diff","patch_url":"https://github.com/brimdata/zed/pull/10.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/10","number":10,"state":"closed","locked":false,"title":"ZSON reading PROD-1064","user":{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false},"body":"A few pieces here are incomplete but can be addressed in follow-ups\r\n- no support for the zson \"bytes\" type\r\n- no support for descriptors that reference existing descriptors\r\n- no handling of `#sort` directives\r\n- no zson writing\r\n- tests could be more thorough\r\n","created_at":"2019-11-12T22:55:59Z","updated_at":"2019-11-20T18:26:13Z","closed_at":"2019-11-14T23:20:57Z","merged_at":"2019-11-14T23:20:57Z","merge_commit_sha":"4b2d8718edd640344a4ce1d5e138555f23964618","assignee":null,"assignees":[],"requested_reviewers":[{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/10/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/10/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/10/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/944651070c87c21480c97bf798ad5b976d0df159","head":{"label":"brimdata:read-zson","ref":"read-zson","sha":"944651070c87c21480c97bf798ad5b976d0df159","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"c9b95c4697ca66446db189342c1228a4d7055fe7","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/10"},"html":{"href":"https://github.com/brimdata/zed/pull/10"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/10"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/10/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/10/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/10/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/944651070c87c21480c97bf798ad5b976d0df159"}},"author_association":"NONE","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/11","id":340224952,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQwMjI0OTUy","html_url":"https://github.com/brimdata/zed/pull/11","diff_url":"https://github.com/brimdata/zed/pull/11.diff","patch_url":"https://github.com/brimdata/zed/pull/11.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/11","number":11,"state":"closed","locked":false,"title":"various cleanup of comments/names","user":{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},"body":"","created_at":"2019-11-13T03:43:33Z","updated_at":"2019-11-15T17:28:55Z","closed_at":"2019-11-15T15:26:03Z","merged_at":"2019-11-15T15:26:03Z","merge_commit_sha":"f4462d21991f75fdd29adc1bfa295c9e505bf9cd","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/11/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/11/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/11/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/57104fe2f731ccb9730ce9374aadaab066b02705","head":{"label":"brimdata:tweeks","ref":"tweeks","sha":"57104fe2f731ccb9730ce9374aadaab066b02705","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"c9b95c4697ca66446db189342c1228a4d7055fe7","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/11"},"html":{"href":"https://github.com/brimdata/zed/pull/11"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/11"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/11/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/11/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/11/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/57104fe2f731ccb9730ce9374aadaab066b02705"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/12","id":340670258,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQwNjcwMjU4","html_url":"https://github.com/brimdata/zed/pull/12","diff_url":"https://github.com/brimdata/zed/pull/12.diff","patch_url":"https://github.com/brimdata/zed/pull/12.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/12","number":12,"state":"closed","locked":false,"title":"Make leading \"* |\" optional PROD-1053","user":{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false},"body":"A tiny bit of refactoring of the ast construction as well to make\r\nthis easier: makeSequentialProc() and makeParallelProc() now just\r\ntake arrays and any necessary array building moves into grammar rules.","created_at":"2019-11-13T21:12:41Z","updated_at":"2019-11-13T21:27:08Z","closed_at":"2019-11-13T21:27:05Z","merged_at":"2019-11-13T21:27:05Z","merge_commit_sha":"8581147e43519424aa05197c40dc4863047a9301","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/12/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/12/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/12/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/11812632cbac009e3d442bc30b84801c35ff7ae8","head":{"label":"brimdata:no-leading-star","ref":"no-leading-star","sha":"11812632cbac009e3d442bc30b84801c35ff7ae8","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"5f7c169979d6d0bfc1781ec2aac3666ddb22c669","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/12"},"html":{"href":"https://github.com/brimdata/zed/pull/12"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/12"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/12/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/12/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/12/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/11812632cbac009e3d442bc30b84801c35ff7ae8"}},"author_association":"NONE","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/13","id":340697038,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQwNjk3MDM4","html_url":"https://github.com/brimdata/zed/pull/13","diff_url":"https://github.com/brimdata/zed/pull/13.diff","patch_url":"https://github.com/brimdata/zed/pull/13.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/13","number":13,"state":"closed","locked":false,"title":"Move sorter functionality to pkg zson","user":{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false},"body":"This will be useful in other places. Also added sorter.Pop/Push to\r\nsatisfy the demands of heap.Interface.","created_at":"2019-11-13T22:24:51Z","updated_at":"2019-11-16T01:24:02Z","closed_at":"2019-11-16T01:23:59Z","merged_at":"2019-11-16T01:23:59Z","merge_commit_sha":"0dc1bc542d620325b55490c3b6e69d2f2e2648aa","assignee":null,"assignees":[],"requested_reviewers":[{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/13/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/13/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/13/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/fe9e281d288aa3d8564efa4a2f638a0be74db493","head":{"label":"brimdata:record-sort","ref":"record-sort","sha":"fe9e281d288aa3d8564efa4a2f638a0be74db493","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"96056e16df4db4e8f05851fa2b153ee906741c73","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/13"},"html":{"href":"https://github.com/brimdata/zed/pull/13"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/13"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/13/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/13/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/13/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/fe9e281d288aa3d8564efa4a2f638a0be74db493"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/14","id":341155288,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQxMTU1Mjg4","html_url":"https://github.com/brimdata/zed/pull/14","diff_url":"https://github.com/brimdata/zed/pull/14.diff","patch_url":"https://github.com/brimdata/zed/pull/14.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/14","number":14,"state":"closed","locked":false,"title":"Use btest to add some rudimentary system tests","user":{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false},"body":"I also moved the main for zq into cmd/zq/main.go","created_at":"2019-11-14T20:12:06Z","updated_at":"2019-11-15T18:38:17Z","closed_at":"2019-11-15T18:38:14Z","merged_at":"2019-11-15T18:38:14Z","merge_commit_sha":"bd778313e8bed482330b0f7e5e032eabd1c0493e","assignee":null,"assignees":[],"requested_reviewers":[{"login":"henridf","id":1022041,"node_id":"MDQ6VXNlcjEwMjIwNDE=","avatar_url":"https://avatars.githubusercontent.com/u/1022041?v=4","gravatar_id":"","url":"https://api.github.com/users/henridf","html_url":"https://github.com/henridf","followers_url":"https://api.github.com/users/henridf/followers","following_url":"https://api.github.com/users/henridf/following{/other_user}","gists_url":"https://api.github.com/users/henridf/gists{/gist_id}","starred_url":"https://api.github.com/users/henridf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henridf/subscriptions","organizations_url":"https://api.github.com/users/henridf/orgs","repos_url":"https://api.github.com/users/henridf/repos","events_url":"https://api.github.com/users/henridf/events{/privacy}","received_events_url":"https://api.github.com/users/henridf/received_events","type":"User","site_admin":false},{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/14/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/14/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/14/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/1e8dee1db6b72b183cb09b50b20ccb4c05d0a2c9","head":{"label":"brimdata:btest","ref":"btest","sha":"1e8dee1db6b72b183cb09b50b20ccb4c05d0a2c9","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"8581147e43519424aa05197c40dc4863047a9301","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/14"},"html":{"href":"https://github.com/brimdata/zed/pull/14"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/14"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/14/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/14/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/14/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/1e8dee1db6b72b183cb09b50b20ccb4c05d0a2c9"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/15","id":341631652,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQxNjMxNjUy","html_url":"https://github.com/brimdata/zed/pull/15","diff_url":"https://github.com/brimdata/zed/pull/15.diff","patch_url":"https://github.com/brimdata/zed/pull/15.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/15","number":15,"state":"closed","locked":false,"title":"Add system test documentation to README.md","user":{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false},"body":"","created_at":"2019-11-15T20:42:27Z","updated_at":"2019-11-15T20:57:33Z","closed_at":"2019-11-15T20:57:30Z","merged_at":"2019-11-15T20:57:30Z","merge_commit_sha":"96056e16df4db4e8f05851fa2b153ee906741c73","assignee":null,"assignees":[],"requested_reviewers":[{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},{"login":"nwt","id":2574448,"node_id":"MDQ6VXNlcjI1NzQ0NDg=","avatar_url":"https://avatars.githubusercontent.com/u/2574448?v=4","gravatar_id":"","url":"https://api.github.com/users/nwt","html_url":"https://github.com/nwt","followers_url":"https://api.github.com/users/nwt/followers","following_url":"https://api.github.com/users/nwt/following{/other_user}","gists_url":"https://api.github.com/users/nwt/gists{/gist_id}","starred_url":"https://api.github.com/users/nwt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nwt/subscriptions","organizations_url":"https://api.github.com/users/nwt/orgs","repos_url":"https://api.github.com/users/nwt/repos","events_url":"https://api.github.com/users/nwt/events{/privacy}","received_events_url":"https://api.github.com/users/nwt/received_events","type":"User","site_admin":false},{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false},{"login":"mikesbrown","id":16110130,"node_id":"MDQ6VXNlcjE2MTEwMTMw","avatar_url":"https://avatars.githubusercontent.com/u/16110130?v=4","gravatar_id":"","url":"https://api.github.com/users/mikesbrown","html_url":"https://github.com/mikesbrown","followers_url":"https://api.github.com/users/mikesbrown/followers","following_url":"https://api.github.com/users/mikesbrown/following{/other_user}","gists_url":"https://api.github.com/users/mikesbrown/gists{/gist_id}","starred_url":"https://api.github.com/users/mikesbrown/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikesbrown/subscriptions","organizations_url":"https://api.github.com/users/mikesbrown/orgs","repos_url":"https://api.github.com/users/mikesbrown/repos","events_url":"https://api.github.com/users/mikesbrown/events{/privacy}","received_events_url":"https://api.github.com/users/mikesbrown/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/15/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/15/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/15/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/889f9ec6ddfee570e412aef1dd5e4d0512641ff5","head":{"label":"brimdata:system-test-docs","ref":"system-test-docs","sha":"889f9ec6ddfee570e412aef1dd5e4d0512641ff5","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"bd778313e8bed482330b0f7e5e032eabd1c0493e","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/15"},"html":{"href":"https://github.com/brimdata/zed/pull/15"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/15"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/15/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/15/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/15/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/889f9ec6ddfee570e412aef1dd5e4d0512641ff5"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/16","id":341713899,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQxNzEzODk5","html_url":"https://github.com/brimdata/zed/pull/16","diff_url":"https://github.com/brimdata/zed/pull/16.diff","patch_url":"https://github.com/brimdata/zed/pull/16.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/16","number":16,"state":"closed","locked":false,"title":"Add top proc","user":{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false},"body":"Top is similar to sort | head except that it discards\r\nelements not in the top N elements and is therefore\r\nless memory and cpu intensive.\r\n\r\nTop also has a hidden -flush option that will sort return\r\nfor every batch, clearing state inbetween batches.","created_at":"2019-11-16T02:44:11Z","updated_at":"2019-11-18T18:39:55Z","closed_at":"2019-11-18T18:39:54Z","merged_at":"2019-11-18T18:39:54Z","merge_commit_sha":"68dcdb0aef3d4af2d60f1e8bed7c1134fa22185b","assignee":null,"assignees":[],"requested_reviewers":[{"login":"henridf","id":1022041,"node_id":"MDQ6VXNlcjEwMjIwNDE=","avatar_url":"https://avatars.githubusercontent.com/u/1022041?v=4","gravatar_id":"","url":"https://api.github.com/users/henridf","html_url":"https://github.com/henridf","followers_url":"https://api.github.com/users/henridf/followers","following_url":"https://api.github.com/users/henridf/following{/other_user}","gists_url":"https://api.github.com/users/henridf/gists{/gist_id}","starred_url":"https://api.github.com/users/henridf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henridf/subscriptions","organizations_url":"https://api.github.com/users/henridf/orgs","repos_url":"https://api.github.com/users/henridf/repos","events_url":"https://api.github.com/users/henridf/events{/privacy}","received_events_url":"https://api.github.com/users/henridf/received_events","type":"User","site_admin":false},{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/16/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/16/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/16/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/1ec2e38592bc2d056b184332222372fc868a4782","head":{"label":"brimdata:top-proc","ref":"top-proc","sha":"1ec2e38592bc2d056b184332222372fc868a4782","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"0dc1bc542d620325b55490c3b6e69d2f2e2648aa","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/16"},"html":{"href":"https://github.com/brimdata/zed/pull/16"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/16"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/16/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/16/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/16/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/1ec2e38592bc2d056b184332222372fc868a4782"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/17","id":341783114,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQxNzgzMTE0","html_url":"https://github.com/brimdata/zed/pull/17","diff_url":"https://github.com/brimdata/zed/pull/17.diff","patch_url":"https://github.com/brimdata/zed/pull/17.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/17","number":17,"state":"closed","locked":false,"title":"remove descriptor ID from raw","user":{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},"body":"","created_at":"2019-11-16T19:10:59Z","updated_at":"2019-11-17T00:45:37Z","closed_at":"2019-11-17T00:45:36Z","merged_at":"2019-11-17T00:45:36Z","merge_commit_sha":"afb5e101d0acfee2b2c2b717c736be9b036ec449","assignee":null,"assignees":[],"requested_reviewers":[{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/17/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/17/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/17/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/f9d60a09f0d8823e7997e9efa18253986917c82c","head":{"label":"brimdata:notd","ref":"notd","sha":"f9d60a09f0d8823e7997e9efa18253986917c82c","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"0dc1bc542d620325b55490c3b6e69d2f2e2648aa","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/17"},"html":{"href":"https://github.com/brimdata/zed/pull/17"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/17"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/17/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/17/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/17/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/f9d60a09f0d8823e7997e9efa18253986917c82c"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/18","id":341809084,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQxODA5MDg0","html_url":"https://github.com/brimdata/zed/pull/18","diff_url":"https://github.com/brimdata/zed/pull/18.diff","patch_url":"https://github.com/brimdata/zed/pull/18.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/18","number":18,"state":"closed","locked":false,"title":"make test-system depend on build","user":{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false},"body":"","created_at":"2019-11-17T01:18:32Z","updated_at":"2019-11-17T20:15:13Z","closed_at":"2019-11-17T20:15:12Z","merged_at":"2019-11-17T20:15:12Z","merge_commit_sha":"19b3842fd193064fcb0cd07c113c11017f1a8ed2","assignee":null,"assignees":[],"requested_reviewers":[{"login":"henridf","id":1022041,"node_id":"MDQ6VXNlcjEwMjIwNDE=","avatar_url":"https://avatars.githubusercontent.com/u/1022041?v=4","gravatar_id":"","url":"https://api.github.com/users/henridf","html_url":"https://github.com/henridf","followers_url":"https://api.github.com/users/henridf/followers","following_url":"https://api.github.com/users/henridf/following{/other_user}","gists_url":"https://api.github.com/users/henridf/gists{/gist_id}","starred_url":"https://api.github.com/users/henridf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henridf/subscriptions","organizations_url":"https://api.github.com/users/henridf/orgs","repos_url":"https://api.github.com/users/henridf/repos","events_url":"https://api.github.com/users/henridf/events{/privacy}","received_events_url":"https://api.github.com/users/henridf/received_events","type":"User","site_admin":false},{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/18/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/18/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/18/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/5066aeaa998cc382a561a1e4fd776655daadd626","head":{"label":"brimdata:make-build-test","ref":"make-build-test","sha":"5066aeaa998cc382a561a1e4fd776655daadd626","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"afb5e101d0acfee2b2c2b717c736be9b036ec449","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/18"},"html":{"href":"https://github.com/brimdata/zed/pull/18"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/18"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/18/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/18/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/18/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/5066aeaa998cc382a561a1e4fd776655daadd626"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/19","id":341812664,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQxODEyNjY0","html_url":"https://github.com/brimdata/zed/pull/19","diff_url":"https://github.com/brimdata/zed/pull/19.diff","patch_url":"https://github.com/brimdata/zed/pull/19.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/19","number":19,"state":"closed","locked":false,"title":"fix some typos/bugs in the zson spec","user":{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},"body":"","created_at":"2019-11-17T02:26:05Z","updated_at":"2019-11-17T22:19:50Z","closed_at":"2019-11-17T22:19:49Z","merged_at":"2019-11-17T22:19:49Z","merge_commit_sha":"240f59f0c7c123bb79e2aa67e38988d1fd86d172","assignee":null,"assignees":[],"requested_reviewers":[{"login":"nwt","id":2574448,"node_id":"MDQ6VXNlcjI1NzQ0NDg=","avatar_url":"https://avatars.githubusercontent.com/u/2574448?v=4","gravatar_id":"","url":"https://api.github.com/users/nwt","html_url":"https://github.com/nwt","followers_url":"https://api.github.com/users/nwt/followers","following_url":"https://api.github.com/users/nwt/following{/other_user}","gists_url":"https://api.github.com/users/nwt/gists{/gist_id}","starred_url":"https://api.github.com/users/nwt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nwt/subscriptions","organizations_url":"https://api.github.com/users/nwt/orgs","repos_url":"https://api.github.com/users/nwt/repos","events_url":"https://api.github.com/users/nwt/events{/privacy}","received_events_url":"https://api.github.com/users/nwt/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/19/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/19/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/19/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/bee522669a21c375ec8f094b8b53de720bc73999","head":{"label":"brimdata:fix-spec-bugs","ref":"fix-spec-bugs","sha":"bee522669a21c375ec8f094b8b53de720bc73999","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"afb5e101d0acfee2b2c2b717c736be9b036ec449","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/19"},"html":{"href":"https://github.com/brimdata/zed/pull/19"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/19"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/19/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/19/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/19/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/bee522669a21c375ec8f094b8b53de720bc73999"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/20","id":341905899,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQxOTA1ODk5","html_url":"https://github.com/brimdata/zed/pull/20","diff_url":"https://github.com/brimdata/zed/pull/20.diff","patch_url":"https://github.com/brimdata/zed/pull/20.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/20","number":20,"state":"closed","locked":false,"title":"add recursive container support to pkg/zval","user":{"login":"nwt","id":2574448,"node_id":"MDQ6VXNlcjI1NzQ0NDg=","avatar_url":"https://avatars.githubusercontent.com/u/2574448?v=4","gravatar_id":"","url":"https://api.github.com/users/nwt","html_url":"https://github.com/nwt","followers_url":"https://api.github.com/users/nwt/followers","following_url":"https://api.github.com/users/nwt/following{/other_user}","gists_url":"https://api.github.com/users/nwt/gists{/gist_id}","starred_url":"https://api.github.com/users/nwt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nwt/subscriptions","organizations_url":"https://api.github.com/users/nwt/orgs","repos_url":"https://api.github.com/users/nwt/repos","events_url":"https://api.github.com/users/nwt/events{/privacy}","received_events_url":"https://api.github.com/users/nwt/received_events","type":"User","site_admin":false},"body":"","created_at":"2019-11-17T22:33:02Z","updated_at":"2019-11-20T17:25:48Z","closed_at":"2019-11-17T23:01:39Z","merged_at":"2019-11-17T23:01:39Z","merge_commit_sha":"a62729bdf70a576fb7373c9189b88367307ccbbe","assignee":null,"assignees":[],"requested_reviewers":[{"login":"henridf","id":1022041,"node_id":"MDQ6VXNlcjEwMjIwNDE=","avatar_url":"https://avatars.githubusercontent.com/u/1022041?v=4","gravatar_id":"","url":"https://api.github.com/users/henridf","html_url":"https://github.com/henridf","followers_url":"https://api.github.com/users/henridf/followers","following_url":"https://api.github.com/users/henridf/following{/other_user}","gists_url":"https://api.github.com/users/henridf/gists{/gist_id}","starred_url":"https://api.github.com/users/henridf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henridf/subscriptions","organizations_url":"https://api.github.com/users/henridf/orgs","repos_url":"https://api.github.com/users/henridf/repos","events_url":"https://api.github.com/users/henridf/events{/privacy}","received_events_url":"https://api.github.com/users/henridf/received_events","type":"User","site_admin":false},{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/20/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/20/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/20/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/2f67f15ee1bc1462ca033db44fbf8c8c3cc3aef5","head":{"label":"brimdata:zval-recursive-containers","ref":"zval-recursive-containers","sha":"2f67f15ee1bc1462ca033db44fbf8c8c3cc3aef5","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"240f59f0c7c123bb79e2aa67e38988d1fd86d172","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/20"},"html":{"href":"https://github.com/brimdata/zed/pull/20"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/20"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/20/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/20/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/20/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/2f67f15ee1bc1462ca033db44fbf8c8c3cc3aef5"}},"author_association":"MEMBER","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/21","id":341921662,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQxOTIxNjYy","html_url":"https://github.com/brimdata/zed/pull/21","diff_url":"https://github.com/brimdata/zed/pull/21.diff","patch_url":"https://github.com/brimdata/zed/pull/21.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/21","number":21,"state":"closed","locked":false,"title":"move to awk-like command syntax","user":{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},"body":"The command line now expects at least one input file, which can\r\nbe specified as \"-\" for standard input. Also, we allow the zql\r\nexpression to be optional by checking to see if the argument is\r\na valid file and interpret it as such instead of a search for\r\nthe string that represents the file.\r\n\r\nAlso, we added a brief description for help text.\r\n","created_at":"2019-11-18T00:59:12Z","updated_at":"2019-11-19T01:34:45Z","closed_at":"2019-11-19T01:34:44Z","merged_at":"2019-11-19T01:34:44Z","merge_commit_sha":"b8bb3ab6c43212134df9c9fffa00aee66b7ef591","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/21/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/21/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/21/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/1b2d55d22e15d7968cd180f75eaef8190619238a","head":{"label":"brimdata:help","ref":"help","sha":"1b2d55d22e15d7968cd180f75eaef8190619238a","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"a62729bdf70a576fb7373c9189b88367307ccbbe","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/21"},"html":{"href":"https://github.com/brimdata/zed/pull/21"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/21"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/21/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/21/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/21/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/1b2d55d22e15d7968cd180f75eaef8190619238a"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/22","id":341959395,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQxOTU5Mzk1","html_url":"https://github.com/brimdata/zed/pull/22","diff_url":"https://github.com/brimdata/zed/pull/22.diff","patch_url":"https://github.com/brimdata/zed/pull/22.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/22","number":22,"state":"closed","locked":false,"title":"zson writer","user":{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},"body":"These changes allow for reading and writing of zson. The zeek\r\nreader was refactored into a zson reader that uses a zeek parser\r\nfor legacy zeek logs. This commit also fixes a bug where we\r\nweren't properly handling semicolon termination. The zeek parsing\r\ntests were broken out into the legacy parsing tests and tests\r\nin zsio for the new zson syntax.\r\n","created_at":"2019-11-18T04:35:36Z","updated_at":"2019-11-19T01:24:44Z","closed_at":"2019-11-19T01:24:43Z","merged_at":"2019-11-19T01:24:43Z","merge_commit_sha":"40d30826336451ef551b4c23faf6ddd411ea6865","assignee":null,"assignees":[],"requested_reviewers":[{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/22/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/22/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/22/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/94d42f8c7a1bebe96eb88fa9b520e34076864e73","head":{"label":"brimdata:zson-writer","ref":"zson-writer","sha":"94d42f8c7a1bebe96eb88fa9b520e34076864e73","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"a62729bdf70a576fb7373c9189b88367307ccbbe","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/22"},"html":{"href":"https://github.com/brimdata/zed/pull/22"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/22"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/22/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/22/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/22/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/94d42f8c7a1bebe96eb88fa9b520e34076864e73"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/23","id":341962980,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQxOTYyOTgw","html_url":"https://github.com/brimdata/zed/pull/23","diff_url":"https://github.com/brimdata/zed/pull/23.diff","patch_url":"https://github.com/brimdata/zed/pull/23.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/23","number":23,"state":"closed","locked":false,"title":"update zson spec to reflect that brackets don't need to be escaped","user":{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},"body":"","created_at":"2019-11-18T04:52:30Z","updated_at":"2019-11-18T19:40:44Z","closed_at":"2019-11-18T19:40:43Z","merged_at":"2019-11-18T19:40:43Z","merge_commit_sha":"31e686e6b48d860e4343d77d3659d3a95ce03939","assignee":null,"assignees":[],"requested_reviewers":[{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/23/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/23/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/23/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/36b5420a9ee5895e6f73bfc6f5493e9639c428ad","head":{"label":"brimdata:fix-escapes","ref":"fix-escapes","sha":"36b5420a9ee5895e6f73bfc6f5493e9639c428ad","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"a62729bdf70a576fb7373c9189b88367307ccbbe","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/23"},"html":{"href":"https://github.com/brimdata/zed/pull/23"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/23"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/23/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/23/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/23/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/36b5420a9ee5895e6f73bfc6f5493e9639c428ad"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/24","id":342356114,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQyMzU2MTE0","html_url":"https://github.com/brimdata/zed/pull/24","diff_url":"https://github.com/brimdata/zed/pull/24.diff","patch_url":"https://github.com/brimdata/zed/pull/24.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/24","number":24,"state":"closed","locked":false,"title":"change emitter.Emitter.SetWarningsFd to .SetWarningsWriter","user":{"login":"nwt","id":2574448,"node_id":"MDQ6VXNlcjI1NzQ0NDg=","avatar_url":"https://avatars.githubusercontent.com/u/2574448?v=4","gravatar_id":"","url":"https://api.github.com/users/nwt","html_url":"https://github.com/nwt","followers_url":"https://api.github.com/users/nwt/followers","following_url":"https://api.github.com/users/nwt/following{/other_user}","gists_url":"https://api.github.com/users/nwt/gists{/gist_id}","starred_url":"https://api.github.com/users/nwt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nwt/subscriptions","organizations_url":"https://api.github.com/users/nwt/orgs","repos_url":"https://api.github.com/users/nwt/repos","events_url":"https://api.github.com/users/nwt/events{/privacy}","received_events_url":"https://api.github.com/users/nwt/received_events","type":"User","site_admin":false},"body":"The argument to emitter.Emitter.SetWarningsFd is a *os.File, but an\r\nio.Writer suffices. Change the argument to io.Writer and rename to\r\n.SetWarningsWriter.","created_at":"2019-11-18T20:52:32Z","updated_at":"2019-11-19T02:40:55Z","closed_at":"2019-11-19T02:40:54Z","merged_at":"2019-11-19T02:40:54Z","merge_commit_sha":"4146722662948f429c8844a73e240ca264262e7d","assignee":null,"assignees":[],"requested_reviewers":[{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false},{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/24/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/24/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/24/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/e853ba0d38f5a5aa31110bfc472a13d5842e72e3","head":{"label":"brimdata:emitter.Emitter.SetWarningsWriter","ref":"emitter.Emitter.SetWarningsWriter","sha":"e853ba0d38f5a5aa31110bfc472a13d5842e72e3","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"31e686e6b48d860e4343d77d3659d3a95ce03939","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/24"},"html":{"href":"https://github.com/brimdata/zed/pull/24"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/24"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/24/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/24/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/24/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/e853ba0d38f5a5aa31110bfc472a13d5842e72e3"}},"author_association":"MEMBER","auto_merge":null,"active_lock_reason":null},{},{"url":"https://api.github.com/repos/brimdata/zed/pulls/26","id":342387765,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQyMzg3NzY1","html_url":"https://github.com/brimdata/zed/pull/26","diff_url":"https://github.com/brimdata/zed/pull/26.diff","patch_url":"https://github.com/brimdata/zed/pull/26.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/26","number":26,"state":"closed","locked":false,"title":"ndjson writer","user":{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false},"body":"Support writing output to native ndjson.","created_at":"2019-11-18T22:14:08Z","updated_at":"2019-11-19T18:09:29Z","closed_at":"2019-11-19T18:09:28Z","merged_at":"2019-11-19T18:09:28Z","merge_commit_sha":"f47cddaf1daad9ad1533602da97922d8e5e5bc8e","assignee":null,"assignees":[],"requested_reviewers":[{"login":"henridf","id":1022041,"node_id":"MDQ6VXNlcjEwMjIwNDE=","avatar_url":"https://avatars.githubusercontent.com/u/1022041?v=4","gravatar_id":"","url":"https://api.github.com/users/henridf","html_url":"https://github.com/henridf","followers_url":"https://api.github.com/users/henridf/followers","following_url":"https://api.github.com/users/henridf/following{/other_user}","gists_url":"https://api.github.com/users/henridf/gists{/gist_id}","starred_url":"https://api.github.com/users/henridf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henridf/subscriptions","organizations_url":"https://api.github.com/users/henridf/orgs","repos_url":"https://api.github.com/users/henridf/repos","events_url":"https://api.github.com/users/henridf/events{/privacy}","received_events_url":"https://api.github.com/users/henridf/received_events","type":"User","site_admin":false},{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/26/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/26/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/26/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/97a31306e9883699403b3519155c5a7fae2028d2","head":{"label":"brimdata:ndjson-writer","ref":"ndjson-writer","sha":"97a31306e9883699403b3519155c5a7fae2028d2","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"31e686e6b48d860e4343d77d3659d3a95ce03939","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/26"},"html":{"href":"https://github.com/brimdata/zed/pull/26"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/26"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/26/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/26/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/26/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/97a31306e9883699403b3519155c5a7fae2028d2"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/27","id":342398282,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQyMzk4Mjgy","html_url":"https://github.com/brimdata/zed/pull/27","diff_url":"https://github.com/brimdata/zed/pull/27.diff","patch_url":"https://github.com/brimdata/zed/pull/27.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/27","number":27,"state":"closed","locked":false,"title":"Add reader for ndjson input","user":{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false},"body":"TODO in follow up pr:\r\n- do correct string escaping from json strings into zson (could use some help here).","created_at":"2019-11-18T22:43:07Z","updated_at":"2019-11-20T19:07:34Z","closed_at":"2019-11-20T19:07:33Z","merged_at":"2019-11-20T19:07:33Z","merge_commit_sha":"f4d1b81d4f7fbb2d85df6bce820591a75b0d2a28","assignee":null,"assignees":[],"requested_reviewers":[{"login":"henridf","id":1022041,"node_id":"MDQ6VXNlcjEwMjIwNDE=","avatar_url":"https://avatars.githubusercontent.com/u/1022041?v=4","gravatar_id":"","url":"https://api.github.com/users/henridf","html_url":"https://github.com/henridf","followers_url":"https://api.github.com/users/henridf/followers","following_url":"https://api.github.com/users/henridf/following{/other_user}","gists_url":"https://api.github.com/users/henridf/gists{/gist_id}","starred_url":"https://api.github.com/users/henridf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henridf/subscriptions","organizations_url":"https://api.github.com/users/henridf/orgs","repos_url":"https://api.github.com/users/henridf/repos","events_url":"https://api.github.com/users/henridf/events{/privacy}","received_events_url":"https://api.github.com/users/henridf/received_events","type":"User","site_admin":false},{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/27/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/27/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/27/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/e762130858ba7be9b47686f54ed69cf669585f65","head":{"label":"brimdata:ndjson-reader","ref":"ndjson-reader","sha":"e762130858ba7be9b47686f54ed69cf669585f65","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"f47cddaf1daad9ad1533602da97922d8e5e5bc8e","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/27"},"html":{"href":"https://github.com/brimdata/zed/pull/27"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/27"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/27/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/27/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/27/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/e762130858ba7be9b47686f54ed69cf669585f65"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/28","id":342423722,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQyNDIzNzIy","html_url":"https://github.com/brimdata/zed/pull/28","diff_url":"https://github.com/brimdata/zed/pull/28.diff","patch_url":"https://github.com/brimdata/zed/pull/28.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/28","number":28,"state":"closed","locked":false,"title":"fix TS_ISO8601, TS_MILLIS handling in NewRawAndTsFromJSON","user":{"login":"nwt","id":2574448,"node_id":"MDQ6VXNlcjI1NzQ0NDg=","avatar_url":"https://avatars.githubusercontent.com/u/2574448?v=4","gravatar_id":"","url":"https://api.github.com/users/nwt","html_url":"https://github.com/nwt","followers_url":"https://api.github.com/users/nwt/followers","following_url":"https://api.github.com/users/nwt/following{/other_user}","gists_url":"https://api.github.com/users/nwt/gists{/gist_id}","starred_url":"https://api.github.com/users/nwt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nwt/subscriptions","organizations_url":"https://api.github.com/users/nwt/orgs","repos_url":"https://api.github.com/users/nwt/repos","events_url":"https://api.github.com/users/nwt/events{/privacy}","received_events_url":"https://api.github.com/users/nwt/received_events","type":"User","site_admin":false},"body":"zson.NewRawAndTsFromJSON does not convert Zeek JSON::TS_ISO8601\r\ntimestamps to the standard Zeek format, and it does not handle\r\nJSON:TS_MILLIS timestamps correctly. Fix both issues.","created_at":"2019-11-19T00:11:46Z","updated_at":"2019-11-25T18:59:35Z","closed_at":"2019-11-25T18:59:34Z","merged_at":"2019-11-25T18:59:34Z","merge_commit_sha":"ab5c3541e9ae60559bd8abc3e6f5da69fef52877","assignee":null,"assignees":[],"requested_reviewers":[{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/28/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/28/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/28/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/654c9c5eb6512858d318cbe51b2e39a80d0f20a3","head":{"label":"brimdata:fix-json-timestamps","ref":"fix-json-timestamps","sha":"654c9c5eb6512858d318cbe51b2e39a80d0f20a3","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"dbf3be81bae0fbefd1125f2ce900cb696083db15","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/28"},"html":{"href":"https://github.com/brimdata/zed/pull/28"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/28"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/28/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/28/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/28/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/654c9c5eb6512858d318cbe51b2e39a80d0f20a3"}},"author_association":"MEMBER","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/29","id":342895313,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQyODk1MzEz","html_url":"https://github.com/brimdata/zed/pull/29","diff_url":"https://github.com/brimdata/zed/pull/29.diff","patch_url":"https://github.com/brimdata/zed/pull/29.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/29","number":29,"state":"closed","locked":false,"title":"Return count of \"dropped\" fields from zson.NewRawAndTsFromJSON","user":{"login":"henridf","id":1022041,"node_id":"MDQ6VXNlcjEwMjIwNDE=","avatar_url":"https://avatars.githubusercontent.com/u/1022041?v=4","gravatar_id":"","url":"https://api.github.com/users/henridf","html_url":"https://github.com/henridf","followers_url":"https://api.github.com/users/henridf/followers","following_url":"https://api.github.com/users/henridf/following{/other_user}","gists_url":"https://api.github.com/users/henridf/gists{/gist_id}","starred_url":"https://api.github.com/users/henridf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henridf/subscriptions","organizations_url":"https://api.github.com/users/henridf/orgs","repos_url":"https://api.github.com/users/henridf/repos","events_url":"https://api.github.com/users/henridf/events{/privacy}","received_events_url":"https://api.github.com/users/henridf/received_events","type":"User","site_admin":false},"body":"With this counter, a caller of `zson.NewRawAndTsFromJSON` can tell when the json input has \"extra\" fields that are not in the type descriptor. \r\n\r\nThis can be useful, for example, to inform the user that a json log has more fields than expected.","created_at":"2019-11-19T21:14:46Z","updated_at":"2019-11-21T17:05:50Z","closed_at":"2019-11-21T17:05:49Z","merged_at":"2019-11-21T17:05:49Z","merge_commit_sha":"f3e6b9af18df69a8368d05a4ca81ed3ff40b9f94","assignee":null,"assignees":[],"requested_reviewers":[{"login":"mccanne","id":2111841,"node_id":"MDQ6VXNlcjIxMTE4NDE=","avatar_url":"https://avatars.githubusercontent.com/u/2111841?v=4","gravatar_id":"","url":"https://api.github.com/users/mccanne","html_url":"https://github.com/mccanne","followers_url":"https://api.github.com/users/mccanne/followers","following_url":"https://api.github.com/users/mccanne/following{/other_user}","gists_url":"https://api.github.com/users/mccanne/gists{/gist_id}","starred_url":"https://api.github.com/users/mccanne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mccanne/subscriptions","organizations_url":"https://api.github.com/users/mccanne/orgs","repos_url":"https://api.github.com/users/mccanne/repos","events_url":"https://api.github.com/users/mccanne/events{/privacy}","received_events_url":"https://api.github.com/users/mccanne/received_events","type":"User","site_admin":false},{"login":"nwt","id":2574448,"node_id":"MDQ6VXNlcjI1NzQ0NDg=","avatar_url":"https://avatars.githubusercontent.com/u/2574448?v=4","gravatar_id":"","url":"https://api.github.com/users/nwt","html_url":"https://github.com/nwt","followers_url":"https://api.github.com/users/nwt/followers","following_url":"https://api.github.com/users/nwt/following{/other_user}","gists_url":"https://api.github.com/users/nwt/gists{/gist_id}","starred_url":"https://api.github.com/users/nwt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nwt/subscriptions","organizations_url":"https://api.github.com/users/nwt/orgs","repos_url":"https://api.github.com/users/nwt/repos","events_url":"https://api.github.com/users/nwt/events{/privacy}","received_events_url":"https://api.github.com/users/nwt/received_events","type":"User","site_admin":false},{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/29/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/29/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/29/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/1fa542f732ab7d435e6043ce9d5d90fccb354d4c","head":{"label":"brimdata:better-json-feedback","ref":"better-json-feedback","sha":"1fa542f732ab7d435e6043ce9d5d90fccb354d4c","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"b49c9714d9aa8b74093fdbc12200df65137c88a7","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/29"},"html":{"href":"https://github.com/brimdata/zed/pull/29"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/29"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/29/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/29/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/29/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/1fa542f732ab7d435e6043ce9d5d90fccb354d4c"}},"author_association":"CONTRIBUTOR","auto_merge":null,"active_lock_reason":null},{"url":"https://api.github.com/repos/brimdata/zed/pulls/30","id":342958768,"node_id":"MDExOlB1bGxSZXF1ZXN0MzQyOTU4NzY4","html_url":"https://github.com/brimdata/zed/pull/30","diff_url":"https://github.com/brimdata/zed/pull/30.diff","patch_url":"https://github.com/brimdata/zed/pull/30.patch","issue_url":"https://api.github.com/repos/brimdata/zed/issues/30","number":30,"state":"closed","locked":false,"title":"zval.sizeBytes incorrect","user":{"login":"mattnibs","id":2147549,"node_id":"MDQ6VXNlcjIxNDc1NDk=","avatar_url":"https://avatars.githubusercontent.com/u/2147549?v=4","gravatar_id":"","url":"https://api.github.com/users/mattnibs","html_url":"https://github.com/mattnibs","followers_url":"https://api.github.com/users/mattnibs/followers","following_url":"https://api.github.com/users/mattnibs/following{/other_user}","gists_url":"https://api.github.com/users/mattnibs/gists{/gist_id}","starred_url":"https://api.github.com/users/mattnibs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattnibs/subscriptions","organizations_url":"https://api.github.com/users/mattnibs/orgs","repos_url":"https://api.github.com/users/mattnibs/repos","events_url":"https://api.github.com/users/mattnibs/events{/privacy}","received_events_url":"https://api.github.com/users/mattnibs/received_events","type":"User","site_admin":false},"body":"zval.sizeBytes wasn't taking into account bit shifting involved for\r\nthe container bit. As a result some values would report a Uvarint size\r\nof 1 byte when with the container bit the size was actually\r\n2 bytes.","created_at":"2019-11-20T00:36:30Z","updated_at":"2019-11-20T00:59:57Z","closed_at":"2019-11-20T00:57:17Z","merged_at":"2019-11-20T00:57:17Z","merge_commit_sha":"a526929293f34879b5cf875d147bd3eb05834c21","assignee":null,"assignees":[],"requested_reviewers":[{"login":"henridf","id":1022041,"node_id":"MDQ6VXNlcjEwMjIwNDE=","avatar_url":"https://avatars.githubusercontent.com/u/1022041?v=4","gravatar_id":"","url":"https://api.github.com/users/henridf","html_url":"https://github.com/henridf","followers_url":"https://api.github.com/users/henridf/followers","following_url":"https://api.github.com/users/henridf/following{/other_user}","gists_url":"https://api.github.com/users/henridf/gists{/gist_id}","starred_url":"https://api.github.com/users/henridf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henridf/subscriptions","organizations_url":"https://api.github.com/users/henridf/orgs","repos_url":"https://api.github.com/users/henridf/repos","events_url":"https://api.github.com/users/henridf/events{/privacy}","received_events_url":"https://api.github.com/users/henridf/received_events","type":"User","site_admin":false},{"login":"aswan","id":3308522,"node_id":"MDQ6VXNlcjMzMDg1MjI=","avatar_url":"https://avatars.githubusercontent.com/u/3308522?v=4","gravatar_id":"","url":"https://api.github.com/users/aswan","html_url":"https://github.com/aswan","followers_url":"https://api.github.com/users/aswan/followers","following_url":"https://api.github.com/users/aswan/following{/other_user}","gists_url":"https://api.github.com/users/aswan/gists{/gist_id}","starred_url":"https://api.github.com/users/aswan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aswan/subscriptions","organizations_url":"https://api.github.com/users/aswan/orgs","repos_url":"https://api.github.com/users/aswan/repos","events_url":"https://api.github.com/users/aswan/events{/privacy}","received_events_url":"https://api.github.com/users/aswan/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/brimdata/zed/pulls/30/commits","review_comments_url":"https://api.github.com/repos/brimdata/zed/pulls/30/comments","review_comment_url":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}","comments_url":"https://api.github.com/repos/brimdata/zed/issues/30/comments","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/9afd0010b39ec4b6bb2a1645b9ebb7152e454f9e","head":{"label":"brimdata:fix-size-bytes","ref":"fix-size-bytes","sha":"9afd0010b39ec4b6bb2a1645b9ebb7152e454f9e","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"base":{"label":"brimdata:master","ref":"master","sha":"f47cddaf1daad9ad1533602da97922d8e5e5bc8e","user":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"repo":{"id":220333768,"node_id":"MDEwOlJlcG9zaXRvcnkyMjAzMzM3Njg=","name":"zed","full_name":"brimdata/zed","private":false,"owner":{"login":"brimdata","id":52328826,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUyMzI4ODI2","avatar_url":"https://avatars.githubusercontent.com/u/52328826?v=4","gravatar_id":"","url":"https://api.github.com/users/brimdata","html_url":"https://github.com/brimdata","followers_url":"https://api.github.com/users/brimdata/followers","following_url":"https://api.github.com/users/brimdata/following{/other_user}","gists_url":"https://api.github.com/users/brimdata/gists{/gist_id}","starred_url":"https://api.github.com/users/brimdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brimdata/subscriptions","organizations_url":"https://api.github.com/users/brimdata/orgs","repos_url":"https://api.github.com/users/brimdata/repos","events_url":"https://api.github.com/users/brimdata/events{/privacy}","received_events_url":"https://api.github.com/users/brimdata/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/brimdata/zed","description":"A cloud-native, searchable data lake for semi-structured and structured data","fork":false,"url":"https://api.github.com/repos/brimdata/zed","forks_url":"https://api.github.com/repos/brimdata/zed/forks","keys_url":"https://api.github.com/repos/brimdata/zed/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brimdata/zed/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brimdata/zed/teams","hooks_url":"https://api.github.com/repos/brimdata/zed/hooks","issue_events_url":"https://api.github.com/repos/brimdata/zed/issues/events{/number}","events_url":"https://api.github.com/repos/brimdata/zed/events","assignees_url":"https://api.github.com/repos/brimdata/zed/assignees{/user}","branches_url":"https://api.github.com/repos/brimdata/zed/branches{/branch}","tags_url":"https://api.github.com/repos/brimdata/zed/tags","blobs_url":"https://api.github.com/repos/brimdata/zed/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brimdata/zed/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brimdata/zed/git/refs{/sha}","trees_url":"https://api.github.com/repos/brimdata/zed/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brimdata/zed/statuses/{sha}","languages_url":"https://api.github.com/repos/brimdata/zed/languages","stargazers_url":"https://api.github.com/repos/brimdata/zed/stargazers","contributors_url":"https://api.github.com/repos/brimdata/zed/contributors","subscribers_url":"https://api.github.com/repos/brimdata/zed/subscribers","subscription_url":"https://api.github.com/repos/brimdata/zed/subscription","commits_url":"https://api.github.com/repos/brimdata/zed/commits{/sha}","git_commits_url":"https://api.github.com/repos/brimdata/zed/git/commits{/sha}","comments_url":"https://api.github.com/repos/brimdata/zed/comments{/number}","issue_comment_url":"https://api.github.com/repos/brimdata/zed/issues/comments{/number}","contents_url":"https://api.github.com/repos/brimdata/zed/contents/{+path}","compare_url":"https://api.github.com/repos/brimdata/zed/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brimdata/zed/merges","archive_url":"https://api.github.com/repos/brimdata/zed/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brimdata/zed/downloads","issues_url":"https://api.github.com/repos/brimdata/zed/issues{/number}","pulls_url":"https://api.github.com/repos/brimdata/zed/pulls{/number}","milestones_url":"https://api.github.com/repos/brimdata/zed/milestones{/number}","notifications_url":"https://api.github.com/repos/brimdata/zed/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brimdata/zed/labels{/name}","releases_url":"https://api.github.com/repos/brimdata/zed/releases{/id}","deployments_url":"https://api.github.com/repos/brimdata/zed/deployments","created_at":"2019-11-07T21:39:29Z","updated_at":"2022-03-24T19:34:09Z","pushed_at":"2022-03-25T02:39:24Z","git_url":"git://github.com/brimdata/zed.git","ssh_url":"git@github.com:brimdata/zed.git","clone_url":"https://github.com/brimdata/zed.git","svn_url":"https://github.com/brimdata/zed","homepage":"","size":21068,"stargazers_count":245,"watchers_count":245,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":375,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"allow_forking":true,"is_template":false,"topics":[],"visibility":"public","forks":25,"open_issues":375,"watchers":245,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/brimdata/zed/pulls/30"},"html":{"href":"https://github.com/brimdata/zed/pull/30"},"issue":{"href":"https://api.github.com/repos/brimdata/zed/issues/30"},"comments":{"href":"https://api.github.com/repos/brimdata/zed/issues/30/comments"},"review_comments":{"href":"https://api.github.com/repos/brimdata/zed/pulls/30/comments"},"review_comment":{"href":"https://api.github.com/repos/brimdata/zed/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/brimdata/zed/pulls/30/commits"},"statuses":{"href":"https://api.github.com/repos/brimdata/zed/statuses/9afd0010b39ec4b6bb2a1645b9ebb7152e454f9e"}},"author_association":"COLLABORATOR","auto_merge":null,"active_lock_reason":null}] diff --git a/versioned_docs/version-v1.1.0/tutorials/prs.zng b/versioned_docs/version-v1.1.0/tutorials/prs.zng deleted file mode 100644 index 5d94b3526..000000000 Binary files a/versioned_docs/version-v1.1.0/tutorials/prs.zng and /dev/null differ diff --git a/versioned_docs/version-v1.1.0/tutorials/schools.md b/versioned_docs/version-v1.1.0/tutorials/schools.md deleted file mode 100644 index 3b0b8c26b..000000000 --- a/versioned_docs/version-v1.1.0/tutorials/schools.md +++ /dev/null @@ -1,1558 +0,0 @@ ---- -sidebar_position: 3 -sidebar_label: Schools Data ---- - -# Zed and Schools Data - -> This document provides a beginner's overview of the Zed language -using the [zq command](../commands/zq.md) and -[real-world data](https://github.com/brimdata/zed/blob/v1.1.0/testdata/edu/README.md) relating to California schools -and test scores. - -## 1. Getting Started - -If you want to follow along by running the examples, simply -[install zq](../install.md) and copy the -data files used here into your working directory: -``` -curl https://raw.githubusercontent.com/brimdata/zed/main/testdata/edu/schools.zson > schools.zson -curl https://raw.githubusercontent.com/brimdata/zed/main/testdata/edu/testscores.zson > testscores.zson -curl https://raw.githubusercontent.com/brimdata/zed/main/testdata/edu/webaddrs.zson > webaddrs.zson -``` -These files are all encoded in the human-readable [ZSON format](../formats/zson.md) -so you can easily have a look at them. ZSON is not optimized for speed but these -files are small enough that the example queries here will all run fast enough. - -## 2. Exploring the Data - -It's always a good idea to get a feel for any new data, which is easy to do -with Zed. Zed's [sample operator](../language/operators/sample.md) is just the ticket --- -`sample` will select one representative value from each "shape" of data present -in the input, e.g., -```mdtest-command dir=testdata/edu -zq -Z 'sample | sort this' schools.zson testscores.zson webaddrs.zson -``` -displays -```mdtest-output -{ - AvgScrMath: null (uint16), - AvgScrRead: null (uint16), - AvgScrWrite: null (uint16), - cname: "Riverside", - dname: "Beaumont Unified", - sname: "21st Century Learning Institute" -} -{ - School: "'3R' Middle", - District: "Nevada County Office of Education", - City: "Nevada City", - County: "Nevada", - Zip: "95959", - Latitude: null (float64), - Longitude: null (float64), - Magnet: null (bool), - OpenDate: 1995-10-30T00:00:00Z, - ClosedDate: 1996-06-28T00:00:00Z, - Phone: null (string), - StatusType: "Merged", - Website: null (string) -} -{ - Website: "abbott.lynwood.edlioschool.com", - addr: 151.101.0.80 -} -``` ->Note that the `-Z` option tells `zq` to "pretty print" the output in -the [ZSON](../formats/zson.md) format. -Furthermore, you will notice these examples often include a `-z` to indicate -line-oriented ZSON, which is the default when `zq` is writing to standard output. -You can omit `-z` when running these commands on the terminal but we include -them here for clarity and because all of the examples are tied to automated testing, -which does not utilize a terminal for standard output. - -You can also quickly see a list of the leaf-value data types with this query: -```mdtest-command dir=testdata/edu -zq -Z "sample | over this | by typeof(value) | yield typeof | sort" schools.zson testscores.zson webaddrs.zson -``` -which emits -```mdtest-output - -