Pipelines The Tenzir Query Language (TQL) centers around one core principle:
dataflow pipelines.
A pipeline is chain of operators that represents a flow of
data. Operators can produce, transform, or consume data. Think of it as UNIX
pipes or Powershell commands where output from one command is input to the next:
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1a2VLbSlx1MDAxMH3nKyjf1+DMrlHesNmSsFx1MDAwNVx1MDAwM1x03EpRQlx1MDAxYduKZUmRxnih8u93JFx1MDAxM21ekI2dmLr4XHUwMDAxrNm6p6e7z+mRXHUwMDFmt7a3K3Loi8qH7YpcdTAwMTiYhmNbgdGvvIvaXHUwMDFmRFx1MDAxMNqeq7pQ/Fx1MDAxY3q9wIxHtqX0w1x1MDAwZu/fXHUwMDFivl9NZ1VNrzueKVx1MDAxY9FcdTAwMTWuXGbV2H/V8/b2Y/w3IytcdTAwMTCmNNyWI+JcdHFXKlx1MDAwZfNi46nnxpJcdNYo5YzDZIBcdTAwMWTuKWlSWKq3aTihSHuipsrP+0+6vPl8cH5hWFx1MDAxN7d1p0nuXHUwMDFhvVRo03achlx1MDAxYzrjbVx1MDAxOWa7XHUwMDE3ZFRcbmXgdcRX25Jt1Vx1MDAwZlx1MDAwYu3JvNBTXHUwMDA2SGdcdTAwMDVer9V2RVx1MDAxOObmeL5h2nJcdTAwMTi1XHUwMDAxkLSObfBhO21cdTAwMTmop53skGhcbs48j4XXPcdcdTAwMGJcIuH/gPiTir83zE5L6eBa6Vx1MDAxOFNYxDLSMf3fW8qs21x1MDAxNnarLVUjy8hcdTAwMTKxYTFEnGCeXHUwMDE5XHUwMDFjXHTwP1rxXHR/z+7ctZ527vZcdTAwMWMn1Snq2C96RdYzMkc20IenuF87tq29bz/anea56bgo0T3nRkZcdTAwMTB4/UrS8+vd9HV/XHUwMDBml2Ig81x1MDAwYo0l3lx1MDAxY9dcdTAwMDPeXHUwMDBlr+nxV+/w28nNcMh3QWbZp2/pRnu+ZYx9XHUwMDBlMo1cdTAwMTGic8KRjpJ+x3Y7RVx1MDAxYjie2UnddCuj7+NWXHRtknWmbmbsNpxVad5vXHUwMDEwmDhzXHJPXHUwMDFlOZrnkatwuEXiXGbNijPLk5HRl1xutFx1MDAwNVx1MDAxZPbJ8SHEQENcdTAwMDTQ1KxpmoLarDTFdUwgXCJamTRVXGaNnFx1MDAxYS/3s9RtXCJ3UUY880VgSHVM6dl4rmzYI1x1MDAxMUvJtVx1MDAxZVx1MDAxOF3bXHUwMDE55qxcdTAwMWIts+vYrchcdTAwMDBcdTAwMTVT6SyCXFxcbpe2goNkQNe2rGyOvzdCoXSORZGk1VSiXGbVXHUwMDFhfCyTsr3Abtmu4VxcXHUwMDE2NzQ1pEpcdTAwMDGOhmadJCTK7pxcdTAwMDJa4iTH0WtcdTAwMWacXHUwMDFhXHUwMDA33/YvdyRcdTAwMDadU3NcdTAwMTBe3dWvN1x1MDAxZHAg2ii80TjEXHUwMDA0IJa6yOvCm/G6WoA+9a1a6LGjg3t0PFx1MDAxYfG9XHUwMDFke604dvdwcX3V87VTRzO/XGb2mu2bm/blX8Ox6dqUwDGI8Vx1MDAxYo6tXHUwMDE2xzDFXHUwMDFh01G6elx1MDAwNsYmXHUwMDFhk+RcdTAwMDexTlx1MDAwMVx1MDAwNKmh32DsyVNKwNgzQLBcdTAwMWOMjVx1MDAxM8WUU1R2nVk0Ma5hXStcdTAwMGZh81x1MDAxM+KGQlx1MDAxOKqiQs7Aa8IwSDPZKUk9XHUwMDEzIKbKJVx1MDAwNWJcdTAwMTSsXHUwMDBlxOblbUpcdTAwMTlly1x1MDAwNFQojUDWbNey3ZbqTPHmd1x1MDAxNV+GlEWbM/zCKcTRZ/ZcItXBU1NcdTAwMDJsXHUwMDE14VrPXHUwMDBinVx1MDAxZkKLXHUwMDBidYxQ1r1u147y77lnu3JcIl9G1tiNgqwtXGar2KuUzvZVZGBcdTAwMTc4pVx1MDAxZi2aZ1x1MDAxY+m37dRJ4ofk+/d3U0fnPK0wYyv7fynSS2cmXGZcdTAwMDaQhiHUy9+y3I5+ujdcdTAwMTdcdTAwMTj02EdcdTAwMTme7ejgqqP5m54xVHRuXHUwMDEy6VVcdTAwMDZnXG5cdTAwMTRcdTAwMTlOcXGdrHf17HS8bv+SQvhlpKNG7+TMaT7oomvytbLeWmPUrFx1MDAwN1x1MDAxN1x1MDAwM+/SPGQ+XHJcdTAwMDZH9f7xX2O907UpwXpcdTAwMTVFe2O9q2W9iFx1MDAxMFxuXHUwMDE0h9VcdTAwMTeivVx1MDAxOHFONUbT65032vvkKiVo7zNQsGrayydu5pLqRVx1MDAwNVx1MDAxNGaUL/CyYH5O3FBcdTAwMThDmapuvbyXVbUyxJdcdTAwMDCGVeDR1eHY3yS+z3LQhG5O8FK4XHUwMDFj651cdTAwMWZBcyVGTPj1s96sn1x1MDAxNaa8nPZmiNfEXS9njHG8QKV8d+LDs/P9g1x1MDAxMdw7PMatw6F0XHUwMDFlNv6yl7LN4r1cdTAwMWFRXGJcdTAwMWSB41x1MDAxZuG9f56f7p/RW3Fyf73fhN2dXHUwMDEzLbzyO6f1xfgpQDhcdTAwMDN0L+Kn07UpwU+p9sZPV8xPXHUwMDE5J1x1MDAxYeLT2OlEW0JOsSpcdTAwMTOJqlx1MDAxNVdPTlx1MDAwMSaILOBkr5CcPpOvV01O9ZlXLJBrkDOV98qT0/mJa0Oxhlx1MDAxMFTVXHUwMDAwYVx1MDAxNHDF0yj5c1e0gFBMdEhcIipK0miZTVuZ2lxy0TSW/vjoNdPWXHUwMDE3kcjciVx1MDAwMb5cdTAwMWONnVx1MDAxZmv/XHUwMDAzXHUwMDFhO8tcdTAwMDdcdTAwMGLTS1HaPFx1MDAxY2d+Klx1MDAwN2bWv4RcIqYq4FJv78ZcdTAwMTnG8380waXUxD0hXHUwMDBmjaPDXHUwMDAzrl/trjjDvFx1MDAwNGVnXFzj8qraKCu+/Vx1MDAwMbBKozdftKDJYlx1MDAxOYYjU4diMsOQKYUwmqS2XGLqKqdcdTAwMDCcnsE6c8rSt0tcdTAwMGLDdGSbPUNcdTAwMWHPwW9cdTAwMGXSXHUwMDFk0ZRzXHUwMDAwXXqZa6I8buf2UFx1MDAwNOlYj+WCh86uXHUwMDA1KadcdTAwMDTpXHUwMDAwlq9cdTAwMDW9PWnV/VZjp0tb3fpR7eGjtXuy8dGDKK5cdTAwMTJcdTAwMDb0bNW7OfFcdTAwMDM0pVx1MDAwMM6ewlx1MDAwYuNnXfezb1x1MDAxMTRRqEQ/N9Gz1c1zXHUwMDAxdNr8fN35od/i3dtcdTAwMWFcdTAwMWY2Rq1Bq0Y2PoCIKotcdFQuupFcYoRcdTAwMTkmXFzPsoS3XHUwMDAwWmtcdTAwMDBtPVx1MDAxMcKK4ftccqmskzDkyoMt+rUpJ9yMP9H8OPxcIkdcdTAwMTeRqVx1MDAxZn9t/fpcdTAwMGYxykNcbiJ9Operator Operator Operator Operator Data Data Data
Tenzir distinguishes three types of operators:
Source : generates new dataTransformation : modifies dataSink : consumes dataA pipeline consists of one source, one sink, and zero or more transformations.
The diagram below illustrates the operator chaining:
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1abVPbuFx1MDAxNv7Or2DYr41WR+/ab4UtLZRtu0Bvae/sMCZ2XHUwMDEyLyY2tiFJO/z3PXaI7ThcdCGtU7L34lx1MDAxOUhcIsnSsXSe5zxH1ret7e2ddFx1MDAxNHk7v23veMO2XHUwMDEz+G7sXGZ2XmTlt16c+GFcdTAwMWarWP47XHRv4nbespemUfLbr786UUTKu0g7vFx1MDAxYd/pXHUwMDA13pXXT1x1MDAxM2z7X/y9vf0t/19cdTAwMTkr8Pte3jYvrYxkTL30XdjPR5WgpVx1MDAwNm5k0cBPfseRUs/F2o5cdTAwMTMkXlnj5mZeyH19PTw78lx1MDAwZYedw/NcdTAwMTPH1yejctSOXHUwMDFmXHUwMDA0J+koXHUwMDE4P5LT7t3EXHUwMDE1m5I0XHUwMDBlL71Pvpv2sFx1MDAxZWrlxX1JiFx1MDAwZl/eXHUwMDE1hzfdXt9Lkql7wshp++koK6O0KHX63byPsmSYtSBCgGbWMKNBciZEUZ11IFxmXHUwMDEwroSxlEpulOE1w/bCIIwzw36h+VWaduG0L7toX98t27Q9V7hO2WZw/7imtKnn+d1emo1cXJYlXj7n1nJcdTAwMDCltSoqsv6jXHUwMDAzN1/4v6qT0nfvJ6V/XHUwMDEzXHUwMDA0pUlZxauKs5T33ESuM15ZUFx1MDAwNlx1MDAxOOOgLJe2qEdcdTAwMDe6rHdcdTAwMTeE7cs5zpCkTpzu+n3X73frt3h9d0FN4CTpXnh15adoxofQ76f1XHUwMDE2eb8v4zhcdTAwMWP0PMed0/PCuijrrkRHdpXftkuHyH9cdTAwMTTf/3qxvLVY2lxcrdjeTLVnlNDqXHUwMDA1q1xyx4mUXGZBrLQx6MBcdTAwMTS8XHUwMDE2yJVcdTAwMWWwYu9W9fPuxWpEw0vD6kTDuULgUaZcdTAwMWZNNG9P7e3o6D211+lXQ4eHkYZdufFEo4BIaoEzLqiUVLBcdTAwMTmi0Vx1MDAxY1lcYklGKm0rPNQo06BcdTAwMTFAOUevMMKCLNn9XHUwMDAx4lx1MDAxMYpcdLDWllx1MDAxNq+HeLRmklx0TYUoo9Iz8UwuVmOGpyaqRZ6UW8eJppZcdTAwMDI1yjIlXHUwMDE08H8tcWldLy1cdTAwMTSS4oxRVlx1MDAwNsllvOV8eHt77p2ev/5cdTAwMWS6b9RoeHT0RdBN5y2GvCUoMKo1p6BcdTAwMDUt5ceEt5Q1XFwgrzE2Vf3kvFx1MDAwNVx1MDAwNlx1MDAwNFx1MDAxOEUrXCL3mbieiev/g7iEXFxIXFyMXHUwMDAyUFx1MDAwNK4sXHUwMDE5YVx1MDAxOXWdv/7zVMafXHUwMDA33Y+R6Vx1MDAwZSP2/uXewe6mU5dgjHBjXHUwMDAxUMBILeuCi1x1MDAxMiNNtthcdTAwMWOlTYVRms3splx1MDAwNXyZP1x1MDAxNrzFLdGCK8wuwWpDZUX4jWlcZvWi1YzK57zvKVlcZlxmYblsZ0Dxr1xm+3llfVxyl/XWQrUvhJVaXHUwMDFii3/IOaLa34xPLOtPT1vH2UO9saW9aWKMXHUwMDAwhbqfXCJcdTAwMGbCXHUwMDE0RVx1MDAwMsJcdTAwMDZQXHRcdTAwMThAo5FDuVkrv6XeMJ3Hb1x1MDAwMFx1MDAwYreukL1FlrBUcqhl/HaRyM9JeFx1MDAxY3W6XHUwMDFk/5LdXHUwMDBlguFua9gwv7lh5uONajNhicIl0CV5janNXHUwMDEwKo20XFz/XHUwMDE4q4F0nIvOLKtVpr6gMVZcdTAwMTlqzFvSYPy06EPrVl+KZ57KaEV7rsBbnbCfnvhfx4FxqnTfufKD0dTq5N6IU0NcYtmZKnxcdTAwMTn43X5cdTAwMWWPvc60v6Z+21x0iuo0jMraNlx1MDAwZeJg/I5cdTAwMGZmuCuM/a7fd4LTeVx1MDAwM2Yx/81k4oFUpv7CSbxcXFx1MDAxMWSL9F24slx1MDAwYmFlJDModNXjXHUwMDEzXHUwMDFleipcdTAwMGbdXHUwMDEzqlx1MDAwM7h+tSd2e2503GlvPKpaUEklcjxRTbhcdTAwMTWSXHUwMDAz+zE8XHUwMDE51rbgzeJJlY77XHUwMDAwnjhcdTAwMTXWUrN2PN3rXHUwMDAwRTmtetxa8XQyftnxUyFVXHUwMDFmc52oQr29MFppSZnA2X48rs7iv+mnXHUwMDAxZ6I1XHUwMDA02kvPPlx1MDAwZlx1MDAwMr6/8biSXHUwMDE4lrg1gtfDVeXOJlHFXHUwMDFmXHUwMDE1pYCjTaiaKu9gflx1MDAxNFaFwvlWfCuWLtp9c/Xy5Fx1MDAxZOvQT9fh17NzPTxqn1x1MDAxNbZP+ZKT6dqdouZuXCKXNlx1MDAwN7RZ/z9cdTAwMTeyUyOuXHUwMDEzsKwyj3XAXG7DOVx1MDAwMtaWydwywH50OY2cL1x1MDAwM791ffrh6n0w8NNIbzxgMdxcdTAwMTOtpGLTeFWSXHUwMDEyyS1Va4qGoOZkybPAzVSfolQ391biIdzKtvjQPd9vjXquXHUwMDE3vD5cdEYqXHUwMDFl2Vx1MDAwNnB7v3XIXHUwMDAwRNWv14rb09jpJ50wvnJSdOvk50J44eBNoHk89fPi7+LdMJBcbpWVhsrrrWVwfthcdTAwMTk2XHUwMDE2zlZcdTAwMTHFuFx1MDAxMlqCwJinp486qGybwGIj84NZ41wiXFxcdTAwMGJFKFxihlx1MDAwZT9cdTAwMWWez1G9QIFcYkPFtFx1MDAxMWPAI1x1MDAxNVx1MDAxOaZWUb8ljidcdTAwMWUy2fq4W1VcdTAwMTSXSaaueux3bo5VXGa7P7xz8Ig4kSO7fZNZ2aKEU1x1MDAwNjiNQuOCiHJzMJtcdTAwMTgnyqeS6DxKaTnz0D9tP24njf2xN1x1MDAxNi1cdTAwMWHdlWvxmk9zVb2/xShRwFx1MDAxOaqjpbvwrcX+mVdXXbPsa6v6uTItMcbqpVx1MDAwNS1xoylTelx1MDAwNVraj+lp/KV7MFxmL079fdW5XHUwMDExveN442mpJTVcdTAwMDHFXHUwMDE0qld0ZaSfMlx1MDAwZsqzXHUwMDAzsIQyRrnkXHUwMDFhs1+9JnIyfJZ3yleLnHBhtcDFoGBs5Vx1MDAxNeeYmbLoTY1cdTAwMDC2Slx1MDAwZdE4OUlDdVx1MDAxM+T0NDv362ZcbsmI5lnuOTlKVb3bXHUwMDEyS4XgUozXd1lfc5wlu+pu0lx1MDAxOEuoheJFXHUwMDFiaUGrMtNdxlx1MDAxMVx1MDAwZuefm8pcdTAwMTFSK2KQXHUwMDAzoJaKIORI9qI1i4BMKmpqJjXDXHKomzj2n1x1MDAxZN3CPNvAPIbQxHBqjLZSSkHp7DaDVmCEUnyVdKV5ikCp+12b5I/UL1x1MDAwZm9MVfRcdTAwMGIlzPLsmJuiXHUwMDAwyuL6Vd5/TVx1MDAwNFxmXHUwMDEwqSuR+39RvsjsUKDkylxuM3atqdeAXHUwMDA2/U5JYFx1MDAxM6da2t1CT82uXHUwMDE5XHUwMDFmXZGfXHUwMDE2n+2U9dJcdD2h0yEjPv6YwavUMX/uRt1zccs+yuP/vG3Z46ZcdTAwMTOrxo9cdTAwMTlkXHUwMDA3SpQ1yMNcdTAwMWPJXHUwMDE4eEnWk3NcdTAwMDZW4YRnW7xaremYwfdcdTAwMWOPQtWiXHUwMDA1z4xagZKej0c1zVx1MDAwMc/Ho1Z54MbOdZqFmZdcdTAwMDFcdTAwMGKM28efR9/7O+Hxxdfk8FV841784Xu96zdN7+42zlpcXFCiNTdWZ6qqXHUwMDFhecrz6EZKaynHpVx1MDAxMrZm2Fx1MDAxM/KWkpjPXHUwMDFiXHLPx9Gfaau4/q20tXV//45cdTAwMTNFJyn6XqGud259b7A7XHUwMDA3TJ38yl4w5KSX8YuXZ1x1MDAwYndbd/9cdTAwMDDiYlx1MDAwM9EifQ==... Source Sink Transformations
If a pipeline would not have a source and sink, it would "leak" data. We call
pipelines that have both a source and sink a closed pipeline . Tenzir can
only execute closed pipelines. A pipeline that solely consists of a chain
transformations is an open pipeline .
Syntax Tenzir comes with its own language to define pipelines, dubbed Tenzir Query
Language (TQL). Even though it is a transformation language, we are calling it
"query language" to allude to the outcome of getting the data in the desired
form. The language is geared towards working with richly typed, structured event
data across multiple schemas.
There exist numerous dataflow languages out there, and we drew inspiration from
others to achieve:
the familiarity of splunk the power of Kusto the expressiveness of dplyr the flexibility of jq the ambition of Zed Why yet another language?
You may sigh and ask "why are you creating yet another language?" We hear you.
Please allow us to elaborate. First, our long-term strategy is to support as
many language frontends as possible, similar to Databricks building a
SIEM-to-Spark transpiler . Our
committment to Apache Arrow and efforts like substrait
and ibis further show that there is a desire for
convergence. Unfortunately we cannot wait until these fledling projects are
production-grade; the needed data engineering has a long
tail .
Second, our goal is to build an open system on top of Apache Arrow, allowing
anyone to hook into a standardized data stream to deploy analytics at scale.
None of the existing dataflow languages used by security people have this
property. Neither did we encounter the capability to write operators that work
across multiple schemas in a rich type system. We do not want users to think of
tables, but rather domain types. Finally, users should be able to express both
streaming and batch workloads in a unified language.
In summary, speed of iteration, the current data ecosystem state, the
commitment to an open data plane, the focus on types as opposed tables, and the
unified execution of streaming and batch workloads drove us to devising a new
language. We hope that you can appreciate and follow this reasoning as you
unpack the language.
More generally, we put a lot of emphasis on the following guidelines when
designing the language:
Use natural language keywords where possible, e.g., verbs to convey actions. Lean on operator names that are familiar to Unix and Powershell users Avoid gratuitous syntax elements like brackets, braces, quotes, or
punctuations. Exploit symmetries for an intuitive learning experience, e.g., from
and
to
have their duals read
and write
. How does the syntax of a concrete Tenzir pipeline look? Let's take the following
example:
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1a23LaSFx1MDAxMH33V1Dsq1HmfslbjK/Jhlx1MDAxMIgv2a3UllxmMshcYkmRXHUwMDA0xknl37dHXHUwMDBlllx1MDAxMFx1MDAxMCBliDZrlW3MTE93a6b7zJmWvu5VKtXkPnSqLytVZ9KxPbdcdTAwMWLZd9V90z52othccnzoXCLp9zhcdTAwMThFnVSynyRh/PLFXHUwMDBiO1xmrWyU1Vx0hlx1MDAwZiNcdTAwMWTPXHUwMDE5On5cdTAwMTKD7N/wvVL5mv7N2fJcXN9JZdPWzFx1MDAxMley2NpcYvzUKlx1MDAxNlx1MDAxYVx0zlx1MDAxNEWPXHUwMDEybnxcYqZcdTAwMTKnXHUwMDBi3Te2XHUwMDE3O1mPaaqeNlx1MDAxYfWjVvswrsmRdpM33eZRLcjM3rie107uvYd7sjv9UZRzKk6iYOBcXLrdpG+sXHUwMDE32lx1MDAxZsfFXHUwMDAx3H02KlxuRr2+78TxzJggtDtucm/aUOa+7fdSXHUwMDFkWcvESJCciFx1MDAxOUIwQ1x1MDAwNev1wFx1MDAwYlwiY/1cdTAwMGaUXpn9a7sz6IFcdTAwMTN+N5PpOF3WtTOZu+k9IWxcdTAwMTFKtCRcZlOKMMvmvu+4vX5cdTAwMDIyXGZZWklCmGJcdTAwMTJJRVnmiZPOO6ZcdTAwMTg6tCaZj8Z+eNZNl/9Tfmb87veZ8Ueel7lsOo5yIZONXHUwMDE5hV37YXmxUFQyoVx1MDAwNdO5XHUwMDEwgTBcdTAwMWFcdTAwMTTVeUFnsCBcIuLEjpJcdTAwMDPX77p+rzjE8btLejw7TurBcOgm4EYzcP2kKJHqfVx1MDAxNUXBXd+xu1x1MDAwYjQv7Vx1MDAwYo26LEfMlf1XyaJcIv3y+P+n/dXSbKW4Kqw8m1x1MDAxZF5Y81Xallx1MDAwN5K5SEFcdTAwMWTe1LlcdTAwMTltXHUwMDA1ZYhsNDO5idnLf37b31xmp5Smy3CKMcJcdTAwMTlCiqxcclOXk0nQTDo354PzO/z2cjw8aYzLXHUwMDBmU1Ihi1x1MDAwMlhpXHLAzDjJkGG7oEW1JZTUXGJRpDmTXFwsXHUwMDAyrTmUkpxohahQu0EphFx1MDAxMX9GqTlpgi0pXHUwMDExxSZHXGKFJaT7s72YK4Yhu6XSYrPMXo15xchcdTAwMTFkdryF8tdKlFpcdTAwMWWIa03FVmBcdNJwXHUwMDE5LFx1MDAxMYZcdTAwMDRFXHUwMDEyZemyXG6WXHUwMDBlXHUwMDE1jW7xyLuOWv94XHIvXHUwMDFhXvC4U3pYgqiyiIBcdTAwMDAjgnCai7ApLFx1MDAxMVx1MDAwYvZcdTAwMTWMieAgm+czT1x0Ujk2lKFcdTAwMTK2XHUwMDEwIVRhTlx1MDAxNTfxP1x1MDAwN1JaXGJNXHUwMDA1XHUwMDEzmVPPIPVcdTAwMGJAakacPDX1ysWwuVx1MDAwMEV0/lJipYKCg8CWJENcdTAwMDSiR1x1MDAxMcY5WqlAK0tcdTAwMTFcdTAwMDHkSShMXHUwMDE0fOTV1YpRitRWoSxxJslcIigjXHUwMDFhXHUwMDE3W1x1MDAxZk+CwL5cdTAwMDDONFufYrVfh6rRXHUwMDFihdiN3stzp1x1MDAwNoyLNcuPZVRZXHUwMDAywVIoolxyZmXZ+oBl3OxZnEssXHTCXHUwMDFh0YJnT4NlTFhKZpZcdTAwMWbhjMyTLMZcdTAwMDB9VelJ1k3gJ233y0NRYab12Fx1MDAxZbqemdtsKtP4hPlcdTAwMDHcyceEaX7luT1cdTAwMTOq1Vx1MDAwZbjrRDNRnLhcdTAwMWTbe1x1MDAxNEiCMOvtgCFcdTAwMWI28OhsXHUwMDBlx4LI7bm+7X1YbNRs+6fT+Ye057lcdTAwMDWNnZRcdTAwMTSYW/op6sC5Xn6iYVx1MDAxNCuJ1k+32882x31Vf/exiWJ2zo79i7s/S59ujOyq8LKQXHUwMDFlXHUwMDEwi0pcdTAwMDFkkiMgXHUwMDAxKJfs0/RcdTAwMDJ4V0gptpv0UoTiZ3owL421RVxyzHFcdEdcdTAwMTXYc/lM7YQwXHUwMDBiY8VcdTAwMDVcdTAwMTdKICZXb541ZGlcdTAwMDTHXGJcbtSPXHUwMDAxeM5cdTAwMTQ7ijFB+cq9XVtIQ3xcdTAwMDHXXHUwMDE3XFxjwX6kbqU2jFx1MDAwYupmz2uz6shcdTAwMWF1opmprklcdTAwMGJcdTAwMTCcXHUwMDExSbk0YI6IU1vt03bYhlx1MDAxMsXWKfpRgD/gSlx1MDAxYtRzPlx1MDAxZTj2wDt2m33WiFx1MDAwZvGbg8br+3b50Y9RS1JmOCiC36zIukOuoVx1MDAxOETUWlxcXHUwMDAznDCX1Nmy/D5cXCNcdTAwMWVccod2ZEbtmG8sMLxVzsGWZ1x1MDAxZEdcdTAwMDA8iGd73cpyhVxmu+rNNUru673xRetqcHHSdkufdYCqs1xiW2Qg2OJcdTAwMTj2XHUwMDA3oVx0lVrzgmfb5CPFgthcdTAwMWNcdTAwMWahafGr9Cn4m/OR/1q5YlOLJWJcdFx1MDAxNKli61x1MDAxNK8gPlx1MDAwNWVig/Jq/fSy9fn1rV8/XHUwMDFiTHTrquW33o8+lFx1MDAxZa8kXHUwMDAyQFx1MDAwMjpcdTAwMDRcXJVKgKdfUpKg0lqLJFBcdTAwMDYnOFx1MDAwMWFTboD6KY6Q4sqO6cGsza0yXHUwMDAziYqtj9U/zc1Eq1xyqn/+YPLXSSNcdTAwMWF7Z82aJ47HJ+TL6L70qcbpSmqglFx1MDAwMUZD3XOPQXfOXGayhZiScyYpuM+en2P8f4jBXHUwMDFjXVxcXVxy+I2IXHUwMDAx58XWKVxcgWtKXHUwMDEyydd/a+3owr16c93Q7aNY1Z3kbVx1MDAwZqtBWH60UtiihGOFpJJcXNNMTVx0iVx1MDAwMdGSSqTLfnL5ueJBXHUwMDEwJTuvXHUwMDFizNh8XG5isDTT5NJcdTAwMTevXGLTXHUwMDFjllx1MDAxNGe7zqpMe3/jNz9etFx1MDAwNl15Op60wmuS3Prd0mdcdTAwMWHBysL5R3LTXHUwMDA020pKcZFfwFx1MDAxZj79w+ZtMKF39FwiKPzQfMhtNamcSfhcdTAwMGLSqmh1m4nF+NI3r5lMXHUwMDFmaMj1a3FD/zjCndbNh3f1k6tRp/U2ukaHpU8shTTMKVx1MDAxNVx1MDAxYSOJXHUwMDA1kcU3XHUwMDFhYVx1MDAwYiNEMTj6XCLN8JZKcYhaeM2EQ0IpnC85bHtcdTAwMTNcdTAwMTP5SNzu0/bITZyKZVWSYNdJt9D0Rpm39518Vu0wbCcwj9D3kIfVsevcXHUwMDFkLFxih5v0qu59z1uTIY5Zkq/f9r79XHUwMDBilNuXfCJ9where summarize head sort export write .. to
Here is how you write this pipeline in the Tenzir language:
export | where #schema == "zeek.weird" && note == "SSL::Invalid_Server_Cert" | summarize count ( num ) by id . resp_h | sort | head 20 | write json to stdout
Expressions Tenzir expressions are search expressions to describe the desired
working set, usually at the beginning of an interactive data exploration. An
expression consists of predicates chained together by connectives , such as a
conjunction (logical AND), a disjunction (logical OR), and a negation (logical
NOT). The expressiveness is equivalent to boolean
algebra and its laws.
Expression occur predominantly as argument to the
where operator to filter the dataflow.
Other expression elements, such as extractors , also
occur in other operators.
Historically, the Tenzir language only supported providing expressions. But the
strong demand for reshaping and analytic workloads made the language evolve to
include dataflow semantics.
Tenzir has two low-level abstractions to integrate with the rest of the world:
Connector : performs low-level I/O to exchange data with a
resource. A connector provides a loader to acquire raw bytes, and/or a
saver to send raw bytes to an external resource.Format : translates bytes into structured events and vice versa.
A format provides a parser that generates events or a printer that
translates events into raw bytes.The following diagram illustrates the dataflow between connectors, formats, and
the remaining operators:
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nN1cXFtX2kxcdTAwMTe+91e4fG8rnfOhdyiCVq1a7UG+9a6uSIJEQoJJULCr//2boJJcdTAwMTCSXHUwMDEwhKTx5UJxctiTmf3sZ5/i763t7Vx1MDAxZH8yNHY+be9cdTAwMTjjjmaZuqs97nxcYsZcdTAwMWZcZtczXHUwMDFkW1x1MDAxZELTvz1n5HamZ/Z8f+h9+vhRXHUwMDFiXHUwMDBla+FVtY4zeL7SsIyBYfueOvd/6u/t7d/Tn1x1MDAxMVmu0fE1+9Yyplx1MDAxN0xcdTAwMGaF4lx1MDAxOITx0S+OPVx1MDAxNS2poERiiGcnmF5DifNccl1cdTAwMWTtapZnhEeCoZ36XHUwMDE5XHUwMDEzj1x1MDAxNr2SYEBcdTAwMWLNx96kvTdcdTAwMTGh1K5pWZf+xHp+Lq3TXHUwMDFiuZE5eb7r9I1cdTAwMWam7vfUcVx1MDAxOFx1MDAxYp9dp2teT01gdth1Rrc92/C8uYucodYx/UkwXHUwMDA2wGz0eVx1MDAxNT5thyPjYMUlXHUwMDBiXHUwMDA3ppdQXHUwMDAxYuL3XHUwMDFky3FcdTAwMDPx/4DpJ5R/o3X6t2pcdTAwMTK2PjvHdzXbXHUwMDFiaq7alvC8x5dcdTAwMDdDJLx3zzBve34wXHUwMDE4maRnTNdcdTAwMTdcdTAwMDGGXHUwMDE5gpSHXHUwMDBmXHUwMDE1iFx1MDAxOVx1MDAxZenTrf43ulx1MDAwMLb+slx1MDAwMPbIssKZXHUwMDA1XHUwMDA3XHUwMDBl4upcdTAwMTFVkTk18Y1xON3IpkJ5hUbHjTFcdTAwMTmjXHUwMDA3tls/8r7XXHUwMDFiYmd23p9cdTAwMGbJt32+uIPR/bc7aU+GQ61cdOvWXHUwMDEzNayDeSmv8jXXdVx1MDAxZfPet7n/dKd9XHUwMDE5tOivXHUwMDFiXHUwMDE3XHUwMDBlYEM7XHUwMDFij3i++758XHUwMDBiXHUwMDE3cDTUtWedhoxzxlx1MDAwNeGAoHBDLNPux9fWcjr9XHUwMDEwXHUwMDA2W5FcdC/Ab25dI8jDXHUwMDE0pCGPUIiAXHUwMDAwkOZGXvImbVx1MDAxNnmeo2zPJoGHXHUwMDAxkDU6XHUwMDBmPcZQYdCDXHUwMDA0LkJcdTAwMGazReRcdTAwMTGlXHUwMDAzXHUwMDEwsc0hb5PKXHUwMDE2bqpj+5fmU7CuSMyNNrWBaU3m9mWqhWqBzoaGq/mO6+3MXHUwMDFkqlvmrT1cdTAwMDWsmrLhzumrbyrWmZ0wMHU9SiVcdTAwMWQlTzNtwz3KQ1x1MDAwMY5r3pq2Zl2lT0etgHH4ujuwhoQygWT2U0R23zOCc4PHp5lcYswkQMpZfHRGgFxiXCKMXHTPT4CO/6XdvuX+0YUxXHUwMDFldfaAzmj3a9VhiFx1MDAxOFqF/2642obi+Vx1MDAwZlx1MDAwNiCkhDFZMP8979xha8/FZ4dXpy2931x1MDAxNl9dfP7ZuN5cdTAwMDRR9S/gfaMrXHUwMDBlulx1MDAwMLQ9sjt+Olx1MDAwN1x1MDAwZmvdd1x1MDAxOV/jxu7u01x1MDAxMbtcdTAwMTVnXHUwMDA3d63m4OT6+sd3b3X+w1FAXHUwMDE2wn9ApFx1MDAwMlx1MDAwZnLAmTLDuYGX/NCVXHUwMDA3noRx4NHCgCfFXCLuXHUwMDE2yVx1MDAwZqpt4ZhJhjdcdTAwMDa7TWraeuTXdNyB5r+V+XxnmEp7S1xmf5z24lx1MDAxMymZ81x1MDAxOEXx0VfoISB5IHOFqE/jXHJcbr7cW/twfOrdgeuT5vVFs/LYQ2JcdTAwMDXSo12sd0hcdKRHoaI8zmlo+f5O0Ld3+tWiT0qDqHfu/3J+YP97d1JFXHUwMDEyXHUwMDExqZpcZlx1MDAwNaUqnFx1MDAwMCy/Jic/ddU1XHUwMDE5Y1x1MDAxY9fkdFx1MDAxNllXkyEmuWhERU9Q/eB0Y4pcXFx1MDAxZFx1MDAxYdl3bFuZV8ctgkmWWNM4kyTMZfNkkp7CwPHRXHUwMDE5j0Bly1x1MDAwMIpE3MvAx34+fTvFelx1MDAxYlx1MDAxZbPbutVt/3hcdTAwMTjdXFxVXHUwMDFlfJTEXFw4pfI1XHUwMDAwlKsmOFDBi4hNZXPZXGZcdTAwMWFcdTAwMDZGIaVEgP9cdTAwMWFGXHUwMDExJlx0Ie9cYodgbjRcdTAwMDOHe1x1MDAxM99Iy2NYRtd/XHUwMDFiXHUwMDAy56ZcdTAwMWKHW0xkXHUwMDFjajSymzNwQZFcdK7nsC9cdTAwMDFdUMjUXGYh41j5K1x1MDAxY4Y6sFxmXtlcdTAwMDHuSvCKZ+hcboRcdTAwMTdcdTAwMTFxeFFZk7NcdTAwMGZcdTAwMDdcdTAwMDVmXHUwMDBieULAhGqAMMww4EKq7Vx1MDAxMYJcdTAwMWG7kVxuylx1MDAwYugkUjFcdTAwMTREcnOpi0JA5/ma6++Ztm7at+pg6CC+XHUwMDE2lZ5cdTAwMTnJOmpeyVx08by2eXbWrX8x0dCMOo1cbqadkVx1MDAxN9274IG1YTDFl4FZLmPHsPXlXHUwMDEyXHUwMDFiP8939479k/173zJ/jk+PnvCk/VaJlub5+85gYPpq2c5cdTAwMWTT9uPLM12Helx1MDAwMMOeoS2YXHUwMDAwNePoMaU0ZiywXHUwMDFhXHUwMDA2N513tsNv29FJqj9m3//9kHh2RO2CT7LChTfZiv5e3cRIIOPDM/+ZQkQoU2qc28ZkJ7vejY3hKCP9WYRVSSr+cVx1MDAxNdpcdTAwMDD037Agl99cdTAwMWXApW+N2o/tJ6t13zlcdTAwMWGejy5cbrUg4PzgW9/tQe70vupcdTAwMWH378+cLi3RgiRYiZhcdTAwMWSZu75IXHUwMDBiXHUwMDEyOT+XscjMXHUwMDFjoUhONm4vOFx1MDAxMYhcdTAwMTPG87v82Xa+qi4/i7dcdTAwMGIwsla55J+OoVx1MDAxM11LsFx1MDAxNSwha0RcdTAwMTaMhVxiXHUwMDFjIU5x0YWSZTkj5+v1yc2kp3esRnc4tlxmt9P+7Oatk1x1MDAxNFV/WaNcdTAwMDHhXHUwMDE1LUtcZmeYXHUwMDBmKSjHhVAq5oRyXG5cdTAwMTBcdTAwMDcgP0Unb1LVIadC6TjkeK24Ulx0S/L8XHUwMDE3Q2vMJGBSqUK1SfpNsfW55nrGm1x1MDAxM1xcS5pcdTAwMDSW2P140Fx1MDAxZJ/LJqLubJajqT1cdTAwMDFcdTAwMTBcdTAwMDPlXHUwMDFmXG4s8vfmZPtcIlWF3Fx1MDAwMstx8FdZXHUwMDBlXG5cIlRcdTAwMTBEN1iYfFx1MDAxYs1cdTAwMWTYk+O+u3f5vX16P+Y39ploXHUwMDE5/b/XXHUwMDBlUFY/XFzxNJdelJSEIEpcdTAwMTjKj7nkTao65lx1MDAxNmiOg79Pc1xiXCJJOWP0XHUwMDFkdVx1MDAwNOSnOdecp7KN8txcdTAwMTLLv8Bz8cmUQHSp6Vx1MDAxZkwlxkFccjU35rLzhFXFXHUwMDFjjje/ZUVzOaqna/NcdTAwMWMgXHUwMDFjU0I2mDx+XHUwMDFizz3qjcH4dOBZSpnvWp877YF1IUtcYucqw0c4PdUhMSOYq+grNziSV7Py4GB0oUE7M/Jat72A5SpqXHUwMDA2Ky9cdTAwMDCA/0VGOnE0vTBCWmKi44RcdTAwMTSfS/F8xFJcdTAwMWJcboTyXHUwMDAwuVgh05GddK4s4uJ0lFx1MDAxNXaVQUeYS2XuRKRT9S91pHXv+r1fp6Of3L7gd1x1MDAwZrbGT7y7XHUwMDEywq7K0FF6r1xypFxiQVx0sCS5wZG8mpVcdTAwMDdcdTAwMDdHyuhcdTAwMDCAkFx1MDAxMFx1MDAwMlxuvFK0tC41UVpTTpmkXHUwMDA0KVrEKFI0zGAqiTgnQFx1MDAxNM5UXHUwMDAyY1x1MDAwMjijkohcdTAwMTVcdTAwMTRxPaa61Fx1MDAxZVxuI6olxjtOVLGpXHUwMDE025ajdjRccolcdTAwMTQyKFxihPlLYNn1iaqWzFx1MDAwNYq35bCM5OC6JXOc4Fx1MDAxNC5cdTAwMTJcdTAwMTVcdTAwMTSMMFx1MDAxMm1oqKRTmLNkvtFcdTAwMTaYXFwl8+w396JcdTAwMTJrKIfM99Z2XHUwMDEzKlns/K3o7zdYi3SXVlx1MDAxOVx1MDAwYi6Vf7VCLSE7z/tuzEWhXHUwMDFkNjhXh03Qn8xcdTAwMDVcIlx1MDAxNY8hc5qLjfa7bNZcXOyCXHUwMDFhySH0vTXZ4LWabNK8fEJSX4qEkjBGOFxcoeeXXHUwMDFl31/v94x259yBzaHfx/Xjh/t34OWH/tXz+yyowC760FxmZr3OQlx1MDAwMaFAzf1cdTAwMWS10ed+neXo41m5TfRzXHUwMDAyy3tbhURYaLGqryRKzPI77veX49bPc91cdTAwMDEnWutcdTAwMTdt+ai1b5LKY0vweCNNWa+r5Cs2XHUwMDEyjiUmXHUwMDFjXHUwMDE1XeQvqzmsvLzxwcP0iUtcdTAwMDVyXFzmJuLuVPTK1PZcdTAwMDChmJFcdTAwMDK6XHUwMDAyeK8u9+tcdTAwMTdHnUPt6aDfuNROXHUwMDBmjMN69XPDXGYvXHUwMDEyY1x1MDAxNLxcXMbmssH/Wlx1MDAwNXPxJMNCQIbLY8lV0q7rsWTQhKY84o/TXCJ94Fx1MDAxYZeKtHTp5fEnRal5LyiVLIqwzO+bYq1/XHUwMDA3qbF70//x+Ov0kDWum3fV74qTskTfXHUwMDE0JnHmXCLoMKcgSDKXXHUwMDE3yZaHOlx1MDAxNVx1MDAxMVx1MDAwZUe+5lx1MDAwN1x1MDAxYVgq4Fx1MDAxMlx1MDAwNa+Bta1cdTAwMTdfYUdcdTAwMWJcdTAwMGUv1X2DY8/I23kwjce9hMpdd/pcdHyOKVJcdTAwMDNIXHUwMDE4wfb8/rP15/8n6XY7In0=Operators Format Connector Bytes Parser Printer Loader Saver I/O Events Parsing/Printing Computation
A connector is typically I/O-bound whereas a format is CPU-bound.
Logical and Phyiscal Operators Tenzir has two types of operators:
Logical Operators : user-facing operators that express the intent in the
domain.Physical Operators : data-facing implementation detail.Let's consider an example of a logical pipeline with the source consisting of
from
and read
, and the sink write
and to
:
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1bbVPaSlx1MDAxNP7ur3C4X0u67y/9RlGsXCK1oFx1MDAwZW3vdJyQXHUwMDA0iIYkJEGgXHUwMDFk//vdRCUhXHUwMDEyXHUwMDAxq1xcWsVcdTAwMTkl5+zu2d2c59lzTsyvnd3dUjT1rdKH3ZI1MXTHNlx1MDAwM31cXHpcdTAwMTfLr60gtD1XqVByXHUwMDFkeqPASFr2o8hcdTAwMGY/vH+v+76W9tJcZm9w29NyrIHlRqFq+6+63t39lfzO2HJs10raJtLUXHUwMDEyhJLkxZ89NzFcdTAwMGKFXHUwMDEwXHUwMDE4XHUwMDEwztNcdTAwMTZ2uKdsRZap1F3dXHStVFx1MDAxM4tK0fl46I/BuN6MXHUwMDA0kuPW4MvZMGO3azvOaTR1blx1MDAxN6VcdTAwMWL9UZDRhlHgXVlt24z6sfWcfNYv9NTy016BN+r1XStcZuf6eL5u2NE0llx1MDAwMTCT6m4vXHUwMDE5I5VM4t1GXHUwMDAwapxcYsRcdTAwMDBEXHUwMDEyXHUwMDExPNMm/TGDXHUwMDFhXHUwMDAxXHUwMDFjXHUwMDAziClcIjI3rarneEE8rX9A8kkn1tGNq56anWumbVxmyySmnrZcdTAwMTnfLVx1MDAxNilcdTAwMWJcdTAwMWNcdTAwMTNcIlx1MDAxOMGIXHUwMDEzXHUwMDA26KxJ37J7/Ui1IVCjXHUwMDA0XCJcdTAwMDJcdKOEcSTSmVjJXHKBhKohXHUwMDE44qkmtu9cdTAwMWaaqWMkUnbWq1xcXHUwMDFlRs2vglY861tzcG0xv3Sn/5HdWde821l35DjpymLFfupzc8qRb+q3XHUwMDBlXHUwMDAymYBcYlEpKGTpjitPvMr3cTzjaoFPhZFcdTAwMWVEXHUwMDFmbde03V6+i+WaXHUwMDA1XHUwMDFhR1x1MDAwZqOqN1x1MDAxONiRmsZcdTAwMTfPdqN8i2TcSlx1MDAxMHjjvqWbXHUwMDBiRi7U+fFw87uZfttN/Sq5mH3/8W5h6zLXIKBcdTAwMDRxTLlyPVx1MDAwMJBVhjQ7XHUwMDA0WTqGcodcdTAwMDLHSfrnXWbpcIV+mGjXXHUwMDFl7tHZ5UbDnC5cdTAwMWKvaH93sn9v3i2mwMiaRIsokGNUxIBcdTAwMDQyXGZcdTAwMTiWq1x1MDAxM6C0WrWGcVx1MDAwMMhBu1x1MDAwNk+YNaxcdTAwMDe1g+0nQFxiNOWCTN1cbiAky1x1MDAxMP4tXHUwMDAzcqypg4BJiVx1MDAwMEOZ7XpOXG7EXFxbQHoonek9y1x1MDAwMcVzgMKlLDdcdJtcdTAwMWbPm1V83v1kXFyK425/2iunt+JcdTAwMGaiwa7nRqf2z+RIZnPSmj6wnfhcdTAwMTalR1bi5Wqfu8FdcDCTVlx1MDAxY7tcdTAwMTf7e8lQ87WCOShEtlxuKmZcclwiz0+1hrKjq+ghOHzAhl5g92xXd85cdTAwMTbajEOOT/f3XHUwMDExaohm3FwitJKAJF7Q0zBLYV46i1ooilx1MDAxZITg1D+WgdbpXnXb+3ZU632rNI+rw1x1MDAwYkOv17dcdTAwMWW0ilc1hFx1MDAwNKaQYMZcdTAwMThJ93f7QKtcYkZcblx1MDAwNEWGSd9A+1x1MDAxMLRBXHUwMDFjcmxcdTAwMTi08zZfXHUwMDEytEzivHRcdTAwMDZaXHUwMDAyXHUwMDA0JCpCWFx1MDAxObP96pl5ss9GP+t2xfWOx1x1MDAxN3uNXHUwMDAx23rMXCJKnuWgpV1sXHUwMDFh5GmYXHUwMDE1RFOh1iqolSRcdTAwMDFcdTAwMDFK5/FcdTAwMDbah6BVWHMtI/KCTSN3geFcdTAwMTeFL+eFcbJAglxutFx1MDAwNnyJXHUwMDEzTMJcdTAwMGJRrnXNK+6ffSNgPOxtPXyxYFx1MDAxYUUyhjHAgmQ2ZM0jt6OSJ/o0+FKWva2PXHUwMDA1ylxcXHUwMDFkuViR7tuZ+2ig7Fx1MDAwNVx1MDAwMz3aNHbzVp9cdTAwMDO4xTU+UIhcXEggwFxmyFxmxy+D7kGrbVx1MDAwZaOpV231eo2jfexZUFxmt1x1MDAxZbpcdTAwMWNgTTmYijOAQFxuXHUwMDE5OeQypFx0hlxilJRcIkby83qmXCJcdTAwMWZcdTAwMTVcdTAwMWFVpilSXHUwMDFjQcjiXHUwMDEyXHUwMDFmoVx1MDAxNEKBXHUwMDAwgFx1MDAxNIJcdTAwMDUlPqDwISRdhuk/XHUwMDA1sn95iVx1MDAwZs01R5spXHRcdTAwMTa4WfzBSkWIXHUwMDEw6myQgsSO9DujlXPuylx1MDAxOV823MtU8Fx1MDAwNMtL7/mNXHUwMDEyyiRbPS7RXHUwMDAx+e6aXHUwMDEyj85+9lx1MDAxYl/EpFFh3zvbT25IaJxcdTAwMDJKuVouZDRd7+ZKXHUwMDAxhGlitbRcdTAwMDJSxoH6kalmMYk1Lyc+7lx1MDAxZlxy6jWzsX/hXHUwMDFm1j9cdTAwMWbCvVdcdTAwMTOYjFx1MDAwMzuyNlx1MDAxZJfkjL5oXHLvsXJcdTAwMDBcdTAwMDKKUzhOd3tcdTAwMTlwj+vD3lx1MDAxMe+MWrjidIzJdXew1zG3XHUwMDFluEKhXHUwMDA2XHRcdTAwMDVcdTAwMDWChEou0P9cdTAwMDFcXFx1MDAxOHPHSrhVgSRcdTAwMTAqoVhWeX/duI28TYM2a/FFXHUwMDExi1xu81xirGJcdFx1MDAxNbag1U/aylf3sHPUuv7aa1x1MDAwZppGeXrQhHaw/YDlKubBXHUwMDAy/O5Ju6FcdTAwMDKeJFRKXGaWXHUwMDE18F43YF9LXHUwMDAxj0OQl85cdTAwMGVcXExcdTAwMTHiVK5x4LbadrVvuGVst783XHUwMDBlh9PmRdtytlx1MDAxZb9cXKBnwe9mKniQXG7CXHUwMDExXFya7b9u/L6CXG5cdTAwMWXBMi++h67KzVx0RWSNXHUwMDAy3rRerV2Uj6q1bv/AXHUwMDEwjdHJ/pEtt1x1MDAxZbmEKWhcblwihYKmijbyT7uVXHUwMDE2XHUwMDExiFx1MDAwNGIkfmpFclx1MDAxM3umUDkzzbRo91x1MDAxMLeYQlxuXHUwMDA1fCvS/ZVFurnmy+txYs32XHUwMDE5J0supSbnPng9g+stZ92SXFwxY5Hi7Fx1MDAxZVx1MDAwMS4w5GD1ZMFcdTAwMWZ1XHUwMDA08JuDXHUwMDEzu743LFx1MDAwZtpH5y1ubD1lsfiZXHUwMDAzkEQgztRqQf5pP0NcdTAwMWFQe6GoTW1cdTAwMDanNDezjXJcdTAwMTZcdTAwMDKAYq5m8vbPw2+k9ZeTVmGCVPwqXHUwMDA0glxup2CdVyH8vZP6ZUCBdXlK5V6nuc+6x1fPTFmmXHUwMDFl9q1cdTAwMDLOSkGzXHUwMDE2Z1H++LtcdTAwMTDy5d+FXHUwMDEwXHUwMDFhXFyUXHUwMDFmKZ/K5GP3z0NcdTAwMTlFTKBM3vpns9aTXHUwMDEyIE3TNp39zJnMpz5cdTAwMGIzn9snjTc7d9td0n3/NFLbpnS3XHUwMDAwLV3b1vjjXHUwMDAyR+kmn/hmJYCOoWPF9+DXzc7Nf1x1MDAwNFx1MDAwMNTHIn0=from read connector format write to connector format ...
A given from
-read
and write
-to
combination often directly maps to its
physical counterpart, the load
-parse
and print
-save
operators that do
the actual work with the help of a connector and format:
eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1cXGtT4khcdTAwMTf+Pr/C8v26ZPt+2W9eXHUwMDA3XHUwMDE18X5cdTAwMTnf2rJcIlx1MDAwNIhcXIJJRJit+e97mlFcdTAwMTJcdTAwMDKBoMBkp8xUjdrppDvp85znOd2n88+XjY3NcNB1Nv/a2HT6XHUwMDE1u+VWfftl81x1MDAwZlPec/zA9Tpwilxm/1x1MDAwZbxnvzKs2Vxiw27w159/2t2uXHUwMDE1XWVVvPbPK52W03Y6YVx1MDAwMHX/XHUwMDBmf29s/DP8P9ZWy+04w7rD0qgljFx1MDAwNUlcdTAwMTaXvc6wWcGEYEhoNqrgXHUwMDA2u9BU6FThbM1uXHUwMDA1TnTGXHUwMDE0bYrjKlxuXHUwMDBlqX5pf1x1MDAxYlx1MDAxY1x1MDAxNuhcdTAwMTPtXHUwMDFk7dSjZmtuq3VcdTAwMTFcdTAwMGVaP5/JrjSe/VingtD3ms6NW1xyXHUwMDFipmOJ8tF1gVx1MDAwN09cdTAwMWZd5XvP9UbHXHSCsWu8rl1xw4EpQ2hUanfqw3tEJX3zspWIXG6Gl8BTJ1rf8Vqeb1r/XHUwMDFmXHUwMDFhXHUwMDFlUftcdTAwMGZ2pVmHTnSqUZ2KU2VVO6rz8vZMsb40XHUwMDFjt95cYqGQIVx1MDAwYsWP2IM7w1x1MDAxN00owYhRKkYnTHvdg+pwuP+Ov4lO9fVNdJ5braiL5sRezESia567VfvncGKhXHUwMDEw15gpqWjUXHUwMDA1MJtm8nYtr9KcYlx1MDAwMUFo++G226m6nXryXHUwMDEyp1NNOdOyg3DHa7fdXHUwMDEwunHquZ0wWWN43y3f915cdTAwMWGOXZ1y59RzXXO7XGJcdTAwMTPmiH7biKxg+Mfo97//mFqbjFUnc+uPVWdzq8dMw1x1MDAxY1RbOn4oseBcclxu0sKIM1wiKZdcdTAwMDLBSeJcdTAwMTQwX6jTsT5/if/88ceiLlx1MDAwNuNk8ZuLoViBXHUwMDA3olx1MDAwYriYg8pN+7RMtoPLyrlfrLSF1lx1MDAxN5Xcu1x1MDAxOHhMS2iEmOBSXHTGZdLhwGnBXHRThGuNSKJjy/E+WllcdTAwMTRpzSkjmIJpqCm+XGJbWGsmNcVYQmdjPufVXHUwMDE5Qdcx3EJ+OqNf6YxcdTAwMTZ0LnJ85OmYp1GWQohcdTAwMTMklFwiUGWuo0k1I3PgxN3m+61ZfSskzZHPvd2HPFjo9MNpXHUwMDFlTLNUjYRcdLwyyaHrmT2Yf1x1MDAxM+5dXaJcdTAwMTP+raprrXtcdTAwMWKfXyqRe1x1MDAwZlx1MDAwNkNqSU6xXHUwMDE2Q1x1MDAwZlx1MDAxMDmPV1x1MDAwN1x1MDAwNoSFNOZcXFx1MDAwM9uwXHUwMDBmObDQtztB1/bBQUw6MTZFQZGYWvvppbCkXHUwMDAyXHUwMDExhVjUzdW4KSmFViCROY5cdTAwMWPiXHUwMDAybqrmdcJcdTAwMGL3+9CQxFjpvt12W+bVjlx1MDAwMPHTOlxyz3p2bGhN6VbLrVx1MDAxYjvdrEBvXHUwMDFkf8yEQ1x1MDAxN8KFUYXQ60ZnK9COXHKk7Vx1MDAxZkx4K893627Hbl1ObdMwffHt7WOL8NhwXHUwMDA2zlBcdTAwMDeYXHUwMDA3eqdaoOlcdTAwMDFcdCVcZmmWXHUwMDFkavXqQe/8XHUwMDE0V8Oj9kHhulx1MDAwZnWD253cQ1xybNfCXG4okIFcImBSRe9jJFx1MDAxNoCGiVwilDIuRLJnS1JcdTAwMGLaUlx1MDAxOODOmeScYFx1MDAxOb30uFpcdTAwMTjrXHUwMDA3nlBcdTAwMGJcdTAwMTJcdTAwMTGtieTRXHUwMDEz5Fx1MDAxMoa/uVrAaUM5PKksXHUwMDEzJmBcdPpcdTAwMTOCTKXYssXHrNbpwq2n2uXkwzDQ21x1MDAxZupdYcLA6a/RXHUwMDFmmCZLR/pcdTAwMDNcdTAwMTNNNSEqiijmOcVOMfDu9MXg5Ks/YGe1ps37d738O0VcdTAwMDXSkkhcdTAwMDXxXCKWXHUwMDFhTVx1MDAwNFDr0lx1MDAxZjqb/pBgfFqyKK7NpeN7l/6AV1x1MDAxMzjrXHUwMDE2IIlGl6FA0tCGXHUwMDAx7qlwXHUwMDAz+1x1MDAxMkxKXHUwMDFhXHTLeXA7rt09Nc5KW9cvjofUluLldi/MPdxcdTAwMTT42dhbXTrIUnVcdTAwMDeV1lx1MDAxNKkxXHQxKZiSksSeZEVcdTAwMTNcdTAwMTHg+5FEmscmiVeNsMDurVx1MDAxZGDjbS5cdTAwMDNfvlNcdH9a11x1MDAxNJBxzZOlb1x1MDAxOFx1MDAwMy+PtI7eylxcPrspu6TMXHUwMDFjr3B1y4vHLX3mbqvcXHUwMDAzjCZcdTAwMTdcdTAwMWTkrEWHXHUwMDA3UCF8qYtcdTAwMGVcdTAwMTOUpZhiJtpYXHUwMDFlZY3Uzz+j39Lcb2w4XHUwMDFmKsVmo8eKV8HF9fVum9Y9+2Znc1Tvx5uSmsOHMm7Lc9D6LprgWKdZMNaCXHSQjSS7XHUwMDExT3/q3Fx1MDAxYnFsXHUwMDFl+NWI4+77XHUwMDFkZjxTfIkpU9Yx1/Q2Ra1cdTAwMTCSUuL1XHUwMDA1nYvY2jRmiLHbXHUwMDE4M0Sj8sZcZqdGXHUwMDA2+e/lhrZbrcbd8Tg9zHOkScZI9iVcdTAwMWJnqPdzXHUwMDA2IyxZOkJcdTAwMWNcdTAwMTKIUY1J9MrmIW5721x1MDAwYon/3KYnXql02ev7W/5Z/sMgrFx1MDAxNqBccl6j1VxuWyltXHUwMDEwqpmgRC1Phr2PNeiZI5yHvq6LWqHysr8l9vzgNIesQaVMt2EqzGKtyM5cdTAwMWHTnzr3Nqy5xZNWPIs3MtjxbN6YXHUwMDE2tE/wXHUwMDA2ppJcclx1MDAxN6LWXHUwMDE3tK+POEqeXV1cdTAwMTlxzHGlSeJI9mVcdTAwMTnEYZuZ1OnrXHQ8NdIgXHUwMDAyXHUwMDExLVx1MDAwNc4+d4ZcdTAwMWJOIVxidoqoTC9Us3m41+2UrnJcdTAwMGY4XCK1JZBUklDKhU6uJ4hcdTAwMGYxyEzkaWIpjTg1XHUwMDBiXHUwMDE5wNE8kosjIE5QXG6wXHToSklcdTAwMTahlIgr3iyCvJb8WDM6f/O1hNRcdTAwMDFNXFz9Jf5zYdAqpZKlo4whXHUwMDE4XHUwMDFjzVx1MDAxNplcdTAwMWaoXHUwMDE0T4Pi3tZF+bbstJ6OXHUwMDFh9/eelLnHLJtISpxcdTAwMDHTj1x1MDAwNlaKWJRTTZFcdTAwMTSCkfhyQzpMMUg/TYVeKM76xOmacJo6oomrM+F0xlp9KrdKriVhUkfSa1x1MDAxZU5LTN60vt2eP56h8/3H67P+YYnq3ONUmMw+ipBJU1x1MDAxMiw2J/Q6ZU4spCjRhClcdTAwMDa8xlx1MDAxMlx1MDAxZMvRWj1GilGKlMi5/P3NgbviPOPP1fiNXHUwMDBmr8aTVKenJcdcXNDs2uTyYnf7ujZofjusUty4PaNfv1ePc+/zJEZcdTAwMTb8hyWmSiv2y3JcdTAwMDGzrcWDoWDwvGx5U1SrXHUwMDBl61x1MDAxN1iL9934m1nTWvx4o8tYK0yNXHUwMDA0NE6f88VcdTAwMTJRzFH2dMDzk6Odw/bJSfn05Luq3J6eP9U7+d+eJJC24EEh7MKKc6aSq/IrjFx1MDAwYjSyNFxiXHUwMDFjpFx1MDAxNWZcZlxcW/RcdTAwMDQz4lx1MDAwMlx1MDAwMUqHYYVcdTAwMTbJvf2MXHUwMDBi1lx1MDAxNb+njWji6kxcZplcdTAwMWW/i/RZbiBvqajA2WFb2lHt3d3yw2X54Fx1MDAxY9u7jeuqXbBzXHUwMDBmW5lcXKlZ5Tyb0lx1MDAxNoE+KVxuxGuyYlwip5lcdTAwMGVUIHDCNVpE7n/CdF3he9p4Jq7+kJDFiKTCVDPEiVx1MDAxMe6ZUcp2jlx1MDAwYkrsdTqN492Ba9e/u7fb+Z9cdTAwMWGHoN1iIFVcdJdcdTAwMTJhnJSylFpac1x1MDAwZf5cZsJcdTAwMTIqRKJjy1x1MDAwMzCbltowXHUwMDAxWaU0XHUwMDAxY8h7iJ5Byk6uUG1cdTAwMGZCJ0iRsi2nXHUwMDE2rkDIJprMJmTZTKzNTGBcdTAwMTDpXHUwMDFiYcFcdTAwMTNjzFx1MDAxNMu+XHUwMDE0VbmS/nPp7uFcdTAwMDA94S21X0bfT1x1MDAwZfOPN7FI/sI60t6EXHUwMDE0hFx1MDAxMvTLXHUwMDEzXHUwMDE4XG53qD/o2Hb5ev/aV8XqPbl+/JbDXHUwMDA0XHUwMDA2ztKnfJVCmHKVnTOmP3TubVjnMOuNg6Rna/hKxC/JejNcdTAwMTNcdTAwMGUry16Y40gn0t6SnVl93lx1MDAxYkvfj6ClmafFPPsyy/7V4zXnVZfYzuVV+UWSs+Oni9xjbuJcdTAwMWItvzjvzXzUXHUwMDAySYT08vD2Pt442SlcdTAwMWX0nuvudrNr9/pbz4dXxeZRXHUwMDBleYOh1FhcdTAwMDOUNcNcYnOU2YanP3TubVhcdTAwMTHwXHUwMDBlXGJcdTAwMTH4TWFFXHUwMDE3YpGPXHUwMDA2XHUwMDE4nFtMQyzDXGKhJmFzylTelJQ4gqRcdTAwMDZaX3nA8brLRiH+0X1s2Vnlwu6tjFPmONkkpyS6slxmRklds5codd9cdTAwMDLBJpeXMp5dwVx1MDAxNS/Zc+9riVx1MDAxZD+0w8f2Y3H7eSD6uUdcIqfIfMxCXHUwMDEziKc1XHUwMDE3MuLX0Vx1MDAwZXutMNEme0LJWMruMlftVSaiUeBcdTAwMTaUkDnfzPCbT8dhZZmELGkon1FcIsRYOlxynEVYXHUwMDAxrlxipVx1MDAxONwrnne7XHUwMDAyssD0OLxuXHUwMDA1llxi5qfHPqJDXHUwMDE1nKZcdTAwMWFxTiTFSM29XHUwMDFm11x1MDAxNvSNaYpcdTAwMDDAXHUwMDFh+vehu8lZd8OJu81f05/ZuVx1MDAwMoaTXHUwMDAyacYkXHUwMDExSmNN5nZvJWv6SqNkabTlV8GoXG6us28tKbF6szGoN3ZvX8TgtMhY+6WJc+9cdTAwMTSF+U5cdTAwMDRcYlx1MDAxM8o0opwmfWLmqdCPxrs80/5fiHy4gNBniVx1MDAwMjw/c6F7vWGfpmuTXHUwMDE1TYYm21xcxmxomlxikamL+mZcdTAwMGYqQYvsnPRe+k2/cH92+XD3+FS0769Oi+Vlf06r6lx1MDAxOYZabk4+0ZakIHmFZIJMSlx1MDAxMOOFgVFAXHUwMDE4gzLGsTmgZVx1MDAwNrtTXHUwMDE0XGJcdTAwMDdcdTAwMDdvNlwigVx1MDAxNqSCMVx1MDAxY/s042insFx1MDAwNG/IkVrfx7U+Ncmc2pOjtiAxpodcdTAwMGLpc09cdTAwMTJcdTAwMTibmSTjzFjlpzdcdTAwMGY77mVlX1xc1r5cdTAwMWXTXXBOJ0H+saoxsrj5Sqn5XG5ccjinZFx1MDAwNo5cdTAwMDL3aDhcdTAwMTNcdTAwMDJsXHUwMDAxXHUwMDFh5kOrhKlYZVx1MDAxNmdcdTAwMTBcdTAwMGJQXHUwMDAzPMEgRHFcbtPy9IeWwFx1MDAxOIWh0ca3kMlPeILD0YTlnTh/c/jOXHUwMDFjTnNMXHUwMDBl5JIgrVLJl4Cg0iDusi9CXCIu+em2XHUwMDFj7Ow1z2r3J2I3OHo4yT+gWWwh9lx1MDAxNcKrWYVElmBcXFx1MDAxMZCqXHUwMDE4/iktp2yAXHUwMDEz2JJcdTAwMTiELDazyUrFPi30tiFcdTAwMGWAJJhe+Td3P1x1MDAwMTs80vg2dSjNMTGIy+JflJ7/Klx1MDAwNDSmXHUwMDE1zb7247cqe9uH5a2Xvjzacf3By32J/lx1MDAwN7SyJNJSjGtCOZdKyiT/glZcdTAwMWVunCdmMiW+nTd3UMaUXHUwMDBm04z4J5Z/Xyyn5ttRmp7/Q6TZLLfAdrmbq577eIxcdTAwMWZcdTAwMGXvSlx1MDAxN0fe3s1cdTAwMTk5Os3/t1x1MDAxZog2m4JcdTAwMTSEKkxcdTAwMDKsk9vlcpZvh0GBgVx1MDAwNltjvl3Urc98uywzTOm5rTz9M9JcYmxLL7JxpCao7D+VzrYqRX9AWuh7q7x/l3usMaEsiSjBWlx1MDAxYUc2McWUs1x1MDAxOV1wuJgostC+kf9cbtj+c1x1MDAxM7pfXrlz0+52L0J4d5tv2f+bPdd52Z5cIpxqw8OknlxmwWpQ4VxmN1xy/Pjy41+2NtNrIn0=load parse save Parser Loader print Bytes Printer Saver Events Bytes Events
However, this rigid mapping is not required. The interfaces for sources and
sinks only demand that the operator generates or consumes structured events.
Some sources do the loading and parsing in a single step, e.g., when going
through a third-party library that exposes the structured data directly. We'd
still like to write from X
at the logical level in this case, but the physical
then won't go through load
and parse
.
This decoupling is what makes the Tenzir language declarative: the user only
needs to specify the intent of how the data flows, but it's up to the
implementation to select the optimal building blocks for the most efficient
realization. For example, filter predicates may be "pushed down" to reduce the
amount of data that flows through a pipeline. Such optimizations are common
practice in declarative query languages.