| <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Query Filters · Apache Druid</title><meta name="viewport" content="width=device-width"/><link rel="canonical" href="https://druid.apache.org/docs/0.16.0-incubating/querying/filters.html"/><meta name="generator" content="Docusaurus"/><meta name="description" content="<!--"/><meta name="docsearch:language" content="en"/><meta name="docsearch:version" content="0.16.0-incubating" /><meta property="og:title" content="Query Filters · Apache Druid"/><meta property="og:type" content="website"/><meta property="og:url" content="https://druid.apache.org/index.html"/><meta property="og:description" content="<!--"/><meta property="og:image" content="https://druid.apache.org/img/druid_nav.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"/><link rel="shortcut icon" href="/img/favicon.png"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><script async="" src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script><script> |
| window.dataLayer = window.dataLayer || []; |
| function gtag(){dataLayer.push(arguments); } |
| gtag('js', new Date()); |
| gtag('config', 'UA-131010415-1'); |
| </script><link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css"/><link rel="stylesheet" href="/css/code-block-buttons.css"/><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><script type="text/javascript" src="/js/code-block-buttons.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/druid_nav.png" alt="Apache Druid"/></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class=""><a href="/technology" target="_self">Technology</a></li><li class=""><a href="/use-cases" target="_self">Use Cases</a></li><li class=""><a href="/druid-powered" target="_self">Powered By</a></li><li class="siteNavGroupActive"><a href="/docs/0.16.0-incubating/design/index.html" target="_self">Docs</a></li><li class=""><a href="/community/" target="_self">Community</a></li><li class=""><a href="https://www.apache.org" target="_self">Apache</a></li><li class=""><a href="/downloads.html" target="_self">Download</a></li><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>Hidden</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Getting started<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/design/index.html">Introduction to Apache Druid</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/tutorials/index.html">Quickstart</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/single-server.html">Single server deployment</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/tutorials/cluster.html">Clustered deployment</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Tutorials<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/tutorials/tutorial-batch.html">Loading files natively</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/tutorials/tutorial-kafka.html">Load from Apache Kafka</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/tutorials/tutorial-batch-hadoop.html">Load from Apache Hadoop</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/tutorials/tutorial-query.html">Querying data</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/tutorials/tutorial-rollup.html">Roll-up</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/tutorials/tutorial-retention.html">Configuring data retention</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/tutorials/tutorial-update-data.html">Updating existing data</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/tutorials/tutorial-compaction.html">Compacting segments</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/tutorials/tutorial-delete-data.html">Deleting data</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/tutorials/tutorial-ingestion-spec.html">Writing an ingestion spec</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/tutorials/tutorial-transform-spec.html">Transforming input data</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/tutorials/tutorial-kerberos-hadoop.html">Kerberized HDFS deep storage</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Design<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/design/architecture.html">Design</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/design/segments.html">Segments</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/design/processes.html">Processes and servers</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/dependencies/deep-storage.html">Deep storage</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/dependencies/metadata-storage.html">Metadata storage</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/dependencies/zookeeper.html">ZooKeeper</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Data ingestion<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/ingestion/index.html">Ingestion</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/ingestion/data-formats.html">Data formats</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/ingestion/schema-design.html">Schema design tips</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/ingestion/data-management.html">Data management</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">Stream ingestion</h4><ul><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/kafka-ingestion.html">Apache Kafka</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/kinesis-ingestion.html">Amazon Kinesis</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/ingestion/tranquility.html">Tranquility</a></li></ul></div><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">Batch ingestion</h4><ul><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/ingestion/native-batch.html">Native batch</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/ingestion/hadoop.html">Hadoop-based</a></li></ul></div><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/ingestion/tasks.html">Task reference</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/ingestion/faq.html">Troubleshooting FAQ</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Querying<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/sql.html">Druid SQL</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">Native query types</h4><ul><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/querying.html">Making native queries</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/timeseriesquery.html">Timeseries</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/topnquery.html">TopN</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/groupbyquery.html">GroupBy</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/scan-query.html">Scan</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/timeboundaryquery.html">TimeBoundary</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/segmentmetadataquery.html">SegmentMetadata</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/datasourcemetadataquery.html">DatasourceMetadata</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/searchquery.html">Search</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/select-query.html">Select</a></li></ul></div><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/multi-value-dimensions.html">Multi-value dimensions</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/lookups.html">Lookups</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/joins.html">Joins</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/multitenancy.html">Multitenancy considerations</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/caching.html">Query caching</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/geo.html">Spatial filters</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Configuration<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/configuration/index.html">Configuration reference</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions.html">Extensions</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/configuration/logging.html">Logging</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Operations<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/management-uis.html">Management UIs</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/basic-cluster-tuning.html">Basic cluster tuning</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/api-reference.html">API reference</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/high-availability.html">High availability</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/rolling-updates.html">Rolling updates</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/rule-configuration.html">Retaining or automatically dropping data</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/metrics.html">Metrics</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/alerts.html">Alerts</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/other-hadoop.html">Working with different versions of Apache Hadoop</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/http-compression.html">HTTP compression</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/recommendations.html">Recommendations</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/tls-support.html">TLS support</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/password-provider.html">Password providers</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/dump-segment.html">dump-segment tool</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/reset-cluster.html">reset-cluster tool</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/insert-segment-to-db.html">insert-segment-to-db tool</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/pull-deps.html">pull-deps tool</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">Misc</h4><ul><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/deep-storage-migration.html">Deep storage migration</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/druid-console.html">Web console</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/export-metadata.html">Export Metadata Tool</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/getting-started.html">Getting started with Apache Druid</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/metadata-migration.html">Metadata Migration</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/segment-optimization.html">Segment Size Optimization</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/operations/use_sbt_to_build_fat_jar.html">Content for build.sbt</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Development<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/overview.html">Developing on Druid</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/modules.html">Creating extensions</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/javascript.html">JavaScript functionality</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/build.html">Build from source</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/versioning.html">Versioning</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/experimental.html">Experimental features</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Misc<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/misc/math-expr.html">Expressions</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/misc/papers-and-talks.html">Papers</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Hidden<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/comparisons/druid-vs-elasticsearch.html">Apache Druid vs Elasticsearch</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/comparisons/druid-vs-key-value.html">Apache Druid vs. Key/Value Stores (HBase/Cassandra/OpenTSDB)</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/comparisons/druid-vs-kudu.html">Apache Druid vs Kudu</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/comparisons/druid-vs-redshift.html">Apache Druid vs Redshift</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/comparisons/druid-vs-spark.html">Apache Druid vs Spark</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/comparisons/druid-vs-sql-on-hadoop.html">Apache Druid vs SQL-on-Hadoop</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/design/auth.html">Authentication and Authorization</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/design/broker.html">Broker</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/design/coordinator.html">Coordinator Process</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/design/historical.html">Historical Process</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/design/indexer.html">Indexer Process</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/design/indexing-service.html">Indexing Service</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/design/middlemanager.html">MiddleManager Process</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/design/overlord.html">Overlord Process</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/design/router.html">Router Process</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/design/peons.html">Peons</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/approximate-histograms.html">Approximate Histogram aggregators</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/avro.html">Apache Avro</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/bloom-filter.html">Bloom Filter</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/datasketches-extension.html">DataSketches extension</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/datasketches-hll.html">DataSketches HLL Sketch module</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/datasketches-quantiles.html">DataSketches Quantiles Sketch module</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/datasketches-theta.html">DataSketches Theta Sketch module</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/datasketches-tuple.html">DataSketches Tuple Sketch module</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/druid-basic-security.html">Basic Security</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/druid-kerberos.html">Kerberos</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/druid-lookups.html">Cached Lookup Module</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/google.html">Google Cloud Storage</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/hdfs.html">HDFS</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/kafka-extraction-namespace.html">Apache Kafka Lookups</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/lookups-cached-global.html">Globally Cached Lookups</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/mysql.html">MySQL Metadata Store</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/orc.html">ORC Extension</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/parquet.html">Apache Parquet Extension</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/postgresql.html">PostgreSQL Metadata Store</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/protobuf.html">Protobuf</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/s3.html">S3-compatible</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/simple-client-sslcontext.html">Simple SSLContext Provider Module</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/stats.html">Stats aggregator</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-core/test-stats.html">Test Stats Aggregators</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/ambari-metrics-emitter.html">Ambari Metrics Emitter</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/azure.html">Microsoft Azure</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/cassandra.html">Apache Cassandra</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/cloudfiles.html">Rackspace Cloud Files</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/distinctcount.html">DistinctCount Aggregator</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/graphite.html">Graphite Emitter</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/aggregations.html">Aggregations</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/datasource.html">Datasources</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/dimensionspecs.html">Transforming Dimension Values</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/0.16.0-incubating/querying/filters.html">Query Filters</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/granularities.html">Aggregation Granularity</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/having.html">Filter groupBy query results</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/hll-old.html">Cardinality/HyperUnique aggregators</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/limitspec.html">Sort groupBy query results</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/post-aggregations.html">Post-Aggregations</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/query-context.html">Query context</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/searchqueryspec.html">Refining search queries</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/sorting-orders.html">Sorting Orders</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/topnmetricspec.html">TopNMetricSpec</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/querying/virtual-columns.html">Virtual Columns</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/influx.html">InfluxDB Line Protocol Parser</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/influxdb-emitter.html">InfluxDB Emitter</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/kafka-emitter.html">Kafka Emitter</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/materialized-view.html">Materialized View</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/momentsketch-quantiles.html">Moment Sketches for Approximate Quantiles module</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/moving-average-query.html">development/extensions-contrib/moving-average-query</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/opentsdb-emitter.html">OpenTSDB Emitter</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/redis-cache.html">Druid Redis Cache</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/sqlserver.html">Microsoft SQLServer</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/statsd.html">StatsD Emitter</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/tdigestsketch-quantiles.html">T-Digest Quantiles Sketch module</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/thrift.html">Thrift</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/development/extensions-contrib/time-min-max.html">Timestamp Min/Max aggregators</a></li><li class="navListItem"><a class="navItem" href="/docs/0.16.0-incubating/ingestion/standalone-realtime.html">Realtime Process</a></li></ul></div></div></section></div><script> |
| var coll = document.getElementsByClassName('collapsible'); |
| var checkActiveCategory = true; |
| for (var i = 0; i < coll.length; i++) { |
| var links = coll[i].nextElementSibling.getElementsByTagName('*'); |
| if (checkActiveCategory){ |
| for (var j = 0; j < links.length; j++) { |
| if (links[j].classList.contains('navListItemActive')){ |
| coll[i].nextElementSibling.classList.toggle('hide'); |
| coll[i].childNodes[1].classList.toggle('rotate'); |
| checkActiveCategory = false; |
| break; |
| } |
| } |
| } |
| |
| coll[i].addEventListener('click', function() { |
| var arrow = this.childNodes[1]; |
| arrow.classList.toggle('rotate'); |
| var content = this.nextElementSibling; |
| content.classList.toggle('hide'); |
| }); |
| } |
| |
| document.addEventListener('DOMContentLoaded', function() { |
| createToggler('#navToggler', '#docsNav', 'docsSliderActive'); |
| createToggler('#tocToggler', 'body', 'tocActive'); |
| |
| var headings = document.querySelector('.toc-headings'); |
| headings && headings.addEventListener('click', function(event) { |
| var el = event.target; |
| while(el !== headings){ |
| if (el.tagName === 'A') { |
| document.body.classList.remove('tocActive'); |
| break; |
| } else{ |
| el = el.parentNode; |
| } |
| } |
| }, false); |
| |
| function createToggler(togglerSelector, targetSelector, className) { |
| var toggler = document.querySelector(togglerSelector); |
| var target = document.querySelector(targetSelector); |
| |
| if (!toggler) { |
| return; |
| } |
| |
| toggler.onclick = function(event) { |
| event.preventDefault(); |
| |
| target.classList.toggle(className); |
| }; |
| } |
| }); |
| </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-druid/edit/master/docs/querying/filters.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 class="postHeaderTitle">Query Filters</h1></header><article><div><span><!-- |
| ~ Licensed to the Apache Software Foundation (ASF) under one |
| ~ or more contributor license agreements. See the NOTICE file |
| ~ distributed with this work for additional information |
| ~ regarding copyright ownership. The ASF licenses this file |
| ~ to you under the Apache License, Version 2.0 (the |
| ~ "License"); you may not use this file except in compliance |
| ~ with the License. You may obtain a copy of the License at |
| ~ |
| ~ http://www.apache.org/licenses/LICENSE-2.0 |
| ~ |
| ~ Unless required by applicable law or agreed to in writing, |
| ~ software distributed under the License is distributed on an |
| ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| ~ KIND, either express or implied. See the License for the |
| ~ specific language governing permissions and limitations |
| ~ under the License. |
| --> |
| <p>A filter is a JSON object indicating which rows of data should be included in the computation for a query. It’s essentially the equivalent of the WHERE clause in SQL. Apache Druid (incubating) supports the following types of filters.</p> |
| <h3><a class="anchor" aria-hidden="true" id="selector-filter"></a><a href="#selector-filter" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Selector filter</h3> |
| <p>The simplest filter is a selector filter. The selector filter will match a specific dimension with a specific value. Selector filters can be used as the base filters for more complex Boolean expressions of filters.</p> |
| <p>The grammar for a SELECTOR filter is as follows:</p> |
| <pre><code class="hljs css language-json">"filter": { "type": "selector", "dimension": <dimension_string>, "value": <dimension_value_string> } |
| </code></pre> |
| <p>This is the equivalent of <code>WHERE <dimension_string> = '<dimension_value_string>'</code>.</p> |
| <p>The selector filter supports the use of extraction functions, see <a href="#filtering-with-extraction-functions">Filtering with Extraction Functions</a> for details.</p> |
| <h3><a class="anchor" aria-hidden="true" id="column-comparison-filter"></a><a href="#column-comparison-filter" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Column Comparison filter</h3> |
| <p>The column comparison filter is similar to the selector filter, but instead compares dimensions to each other. For example:</p> |
| <pre><code class="hljs css language-json">"filter": { "type": "columnComparison", "dimensions": [<dimension_a>, <dimension_b>] } |
| </code></pre> |
| <p>This is the equivalent of <code>WHERE <dimension_a> = <dimension_b></code>.</p> |
| <p><code>dimensions</code> is list of <a href="/docs/0.16.0-incubating/querying/dimensionspecs.html">DimensionSpecs</a>, making it possible to apply an extraction function if needed.</p> |
| <h3><a class="anchor" aria-hidden="true" id="regular-expression-filter"></a><a href="#regular-expression-filter" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Regular expression filter</h3> |
| <p>The regular expression filter is similar to the selector filter, but using regular expressions. It matches the specified dimension with the given pattern. The pattern can be any standard <a href="http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html">Java regular expression</a>.</p> |
| <pre><code class="hljs css language-json">"filter": { "type": "regex", "dimension": <dimension_string>, "pattern": <pattern_string> } |
| </code></pre> |
| <p>The regex filter supports the use of extraction functions, see <a href="#filtering-with-extraction-functions">Filtering with Extraction Functions</a> for details.</p> |
| <h3><a class="anchor" aria-hidden="true" id="logical-expression-filters"></a><a href="#logical-expression-filters" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Logical expression filters</h3> |
| <h4><a class="anchor" aria-hidden="true" id="and"></a><a href="#and" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>AND</h4> |
| <p>The grammar for an AND filter is as follows:</p> |
| <pre><code class="hljs css language-json">"filter": { "type": "and", "fields": [<filter>, <filter>, ...] } |
| </code></pre> |
| <p>The filters in fields can be any other filter defined on this page.</p> |
| <h4><a class="anchor" aria-hidden="true" id="or"></a><a href="#or" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>OR</h4> |
| <p>The grammar for an OR filter is as follows:</p> |
| <pre><code class="hljs css language-json">"filter": { "type": "or", "fields": [<filter>, <filter>, ...] } |
| </code></pre> |
| <p>The filters in fields can be any other filter defined on this page.</p> |
| <h4><a class="anchor" aria-hidden="true" id="not"></a><a href="#not" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>NOT</h4> |
| <p>The grammar for a NOT filter is as follows:</p> |
| <pre><code class="hljs css language-json">"filter": { "type": "not", "field": <filter> } |
| </code></pre> |
| <p>The filter specified at field can be any other filter defined on this page.</p> |
| <h3><a class="anchor" aria-hidden="true" id="javascript-filter"></a><a href="#javascript-filter" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>JavaScript filter</h3> |
| <p>The JavaScript filter matches a dimension against the specified JavaScript function predicate. The filter matches values for which the function returns true.</p> |
| <p>The function takes a single argument, the dimension value, and returns either true or false.</p> |
| <pre><code class="hljs css language-json">{ |
| <span class="hljs-attr">"type"</span> : <span class="hljs-string">"javascript"</span>, |
| <span class="hljs-attr">"dimension"</span> : <dimension_string>, |
| <span class="hljs-attr">"function"</span> : <span class="hljs-string">"function(value) { <...> }"</span> |
| } |
| </code></pre> |
| <p><strong>Example</strong> |
| The following matches any dimension values for the dimension <code>name</code> between <code>'bar'</code> and <code>'foo'</code></p> |
| <pre><code class="hljs css language-json">{ |
| <span class="hljs-attr">"type"</span> : <span class="hljs-string">"javascript"</span>, |
| <span class="hljs-attr">"dimension"</span> : <span class="hljs-string">"name"</span>, |
| <span class="hljs-attr">"function"</span> : <span class="hljs-string">"function(x) { return(x >= 'bar' && x <= 'foo') }"</span> |
| } |
| </code></pre> |
| <p>The JavaScript filter supports the use of extraction functions, see <a href="#filtering-with-extraction-functions">Filtering with Extraction Functions</a> for details.</p> |
| <blockquote> |
| <p>JavaScript-based functionality is disabled by default. Please refer to the Druid <a href="/docs/0.16.0-incubating/development/javascript.html">JavaScript programming guide</a> for guidelines about using Druid's JavaScript functionality, including instructions on how to enable it.</p> |
| </blockquote> |
| <h3><a class="anchor" aria-hidden="true" id="extraction-filter"></a><a href="#extraction-filter" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Extraction filter</h3> |
| <blockquote> |
| <p>The extraction filter is now deprecated. The selector filter with an extraction function specified |
| provides identical functionality and should be used instead.</p> |
| </blockquote> |
| <p>Extraction filter matches a dimension using some specific <a href="./dimensionspecs.html#extraction-functions">Extraction function</a>. |
| The following filter matches the values for which the extraction function has transformation entry <code>input_key=output_value</code> where |
| <code>output_value</code> is equal to the filter <code>value</code> and <code>input_key</code> is present as dimension.</p> |
| <p><strong>Example</strong> |
| The following matches dimension values in <code>[product_1, product_3, product_5]</code> for the column <code>product</code></p> |
| <pre><code class="hljs css language-json">{ |
| <span class="hljs-attr">"filter"</span>: { |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"extraction"</span>, |
| <span class="hljs-attr">"dimension"</span>: <span class="hljs-string">"product"</span>, |
| <span class="hljs-attr">"value"</span>: <span class="hljs-string">"bar_1"</span>, |
| <span class="hljs-attr">"extractionFn"</span>: { |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"lookup"</span>, |
| <span class="hljs-attr">"lookup"</span>: { |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"map"</span>, |
| <span class="hljs-attr">"map"</span>: { |
| <span class="hljs-attr">"product_1"</span>: <span class="hljs-string">"bar_1"</span>, |
| <span class="hljs-attr">"product_5"</span>: <span class="hljs-string">"bar_1"</span>, |
| <span class="hljs-attr">"product_3"</span>: <span class="hljs-string">"bar_1"</span> |
| } |
| } |
| } |
| } |
| } |
| </code></pre> |
| <h3><a class="anchor" aria-hidden="true" id="search-filter"></a><a href="#search-filter" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Search filter</h3> |
| <p>Search filters can be used to filter on partial string matches.</p> |
| <pre><code class="hljs css language-json">{ |
| <span class="hljs-attr">"filter"</span>: { |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"search"</span>, |
| <span class="hljs-attr">"dimension"</span>: <span class="hljs-string">"product"</span>, |
| <span class="hljs-attr">"query"</span>: { |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"insensitive_contains"</span>, |
| <span class="hljs-attr">"value"</span>: <span class="hljs-string">"foo"</span> |
| } |
| } |
| } |
| </code></pre> |
| <table> |
| <thead> |
| <tr><th>property</th><th>description</th><th>required?</th></tr> |
| </thead> |
| <tbody> |
| <tr><td>type</td><td>This String should always be "search".</td><td>yes</td></tr> |
| <tr><td>dimension</td><td>The dimension to perform the search over.</td><td>yes</td></tr> |
| <tr><td>query</td><td>A JSON object for the type of search. See below for more information.</td><td>yes</td></tr> |
| <tr><td>extractionFn</td><td><a href="#filtering-with-extraction-functions">Extraction function</a> to apply to the dimension</td><td>no</td></tr> |
| </tbody> |
| </table> |
| <p>The search filter supports the use of extraction functions, see <a href="#filtering-with-extraction-functions">Filtering with Extraction Functions</a> for details.</p> |
| <h4><a class="anchor" aria-hidden="true" id="search-query-spec"></a><a href="#search-query-spec" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Search query spec</h4> |
| <h5><a class="anchor" aria-hidden="true" id="contains"></a><a href="#contains" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Contains</h5> |
| <table> |
| <thead> |
| <tr><th>property</th><th>description</th><th>required?</th></tr> |
| </thead> |
| <tbody> |
| <tr><td>type</td><td>This String should always be "contains".</td><td>yes</td></tr> |
| <tr><td>value</td><td>A String value to run the search over.</td><td>yes</td></tr> |
| <tr><td>caseSensitive</td><td>Whether two string should be compared as case sensitive or not</td><td>no (default == false)</td></tr> |
| </tbody> |
| </table> |
| <h5><a class="anchor" aria-hidden="true" id="insensitive-contains"></a><a href="#insensitive-contains" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Insensitive Contains</h5> |
| <table> |
| <thead> |
| <tr><th>property</th><th>description</th><th>required?</th></tr> |
| </thead> |
| <tbody> |
| <tr><td>type</td><td>This String should always be "insensitive_contains".</td><td>yes</td></tr> |
| <tr><td>value</td><td>A String value to run the search over.</td><td>yes</td></tr> |
| </tbody> |
| </table> |
| <p>Note that an "insensitive_contains" search is equivalent to a "contains" search with "caseSensitive": false (or not |
| provided).</p> |
| <h5><a class="anchor" aria-hidden="true" id="fragment"></a><a href="#fragment" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Fragment</h5> |
| <table> |
| <thead> |
| <tr><th>property</th><th>description</th><th>required?</th></tr> |
| </thead> |
| <tbody> |
| <tr><td>type</td><td>This String should always be "fragment".</td><td>yes</td></tr> |
| <tr><td>values</td><td>A JSON array of String values to run the search over.</td><td>yes</td></tr> |
| <tr><td>caseSensitive</td><td>Whether strings should be compared as case sensitive or not. Default: false(insensitive)</td><td>no</td></tr> |
| </tbody> |
| </table> |
| <h3><a class="anchor" aria-hidden="true" id="in-filter"></a><a href="#in-filter" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>In filter</h3> |
| <p>In filter can be used to express the following SQL query:</p> |
| <pre><code class="hljs css language-sql"> <span class="hljs-keyword">SELECT</span> <span class="hljs-keyword">COUNT</span>(*) <span class="hljs-keyword">AS</span> <span class="hljs-string">'Count'</span> <span class="hljs-keyword">FROM</span> <span class="hljs-string">`table`</span> <span class="hljs-keyword">WHERE</span> <span class="hljs-string">`outlaw`</span> <span class="hljs-keyword">IN</span> (<span class="hljs-string">'Good'</span>, <span class="hljs-string">'Bad'</span>, <span class="hljs-string">'Ugly'</span>) |
| </code></pre> |
| <p>The grammar for a IN filter is as follows:</p> |
| <pre><code class="hljs css language-json">{ |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"in"</span>, |
| <span class="hljs-attr">"dimension"</span>: <span class="hljs-string">"outlaw"</span>, |
| <span class="hljs-attr">"values"</span>: [<span class="hljs-string">"Good"</span>, <span class="hljs-string">"Bad"</span>, <span class="hljs-string">"Ugly"</span>] |
| } |
| </code></pre> |
| <p>The IN filter supports the use of extraction functions, see <a href="#filtering-with-extraction-functions">Filtering with Extraction Functions</a> for details.</p> |
| <p>If an empty <code>values</code> array is passed to the IN filter, it will simply return an empty result.</p> |
| <h3><a class="anchor" aria-hidden="true" id="like-filter"></a><a href="#like-filter" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Like filter</h3> |
| <p>Like filters can be used for basic wildcard searches. They are equivalent to the SQL LIKE operator. Special characters |
| supported are "%" (matches any number of characters) and "_" (matches any one character).</p> |
| <table> |
| <thead> |
| <tr><th>property</th><th>type</th><th>description</th><th>required?</th></tr> |
| </thead> |
| <tbody> |
| <tr><td>type</td><td>String</td><td>This should always be "like".</td><td>yes</td></tr> |
| <tr><td>dimension</td><td>String</td><td>The dimension to filter on</td><td>yes</td></tr> |
| <tr><td>pattern</td><td>String</td><td>LIKE pattern, such as "foo%" or "___bar".</td><td>yes</td></tr> |
| <tr><td>escape</td><td>String</td><td>An escape character that can be used to escape special characters.</td><td>no</td></tr> |
| <tr><td>extractionFn</td><td><a href="#filtering-with-extraction-functions">Extraction function</a></td><td>Extraction function to apply to the dimension</td><td>no</td></tr> |
| </tbody> |
| </table> |
| <p>Like filters support the use of extraction functions, see <a href="#filtering-with-extraction-functions">Filtering with Extraction Functions</a> for details.</p> |
| <p>This Like filter expresses the condition <code>last_name LIKE "D%"</code> (i.e. last_name starts with "D").</p> |
| <pre><code class="hljs css language-json">{ |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"like"</span>, |
| <span class="hljs-attr">"dimension"</span>: <span class="hljs-string">"last_name"</span>, |
| <span class="hljs-attr">"pattern"</span>: <span class="hljs-string">"D%"</span> |
| } |
| </code></pre> |
| <h3><a class="anchor" aria-hidden="true" id="bound-filter"></a><a href="#bound-filter" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Bound filter</h3> |
| <p>Bound filters can be used to filter on ranges of dimension values. It can be used for comparison filtering like |
| greater than, less than, greater than or equal to, less than or equal to, and "between" (if both "lower" and |
| "upper" are set).</p> |
| <table> |
| <thead> |
| <tr><th>property</th><th>type</th><th>description</th><th>required?</th></tr> |
| </thead> |
| <tbody> |
| <tr><td>type</td><td>String</td><td>This should always be "bound".</td><td>yes</td></tr> |
| <tr><td>dimension</td><td>String</td><td>The dimension to filter on</td><td>yes</td></tr> |
| <tr><td>lower</td><td>String</td><td>The lower bound for the filter</td><td>no</td></tr> |
| <tr><td>upper</td><td>String</td><td>The upper bound for the filter</td><td>no</td></tr> |
| <tr><td>lowerStrict</td><td>Boolean</td><td>Perform strict comparison on the lower bound (">" instead of ">=")</td><td>no, default: false</td></tr> |
| <tr><td>upperStrict</td><td>Boolean</td><td>Perform strict comparison on the upper bound ("<" instead of "<=")</td><td>no, default: false</td></tr> |
| <tr><td>ordering</td><td>String</td><td>Specifies the sorting order to use when comparing values against the bound. Can be one of the following values: "lexicographic", "alphanumeric", "numeric", "strlen", "version". See <a href="/docs/0.16.0-incubating/querying/sorting-orders.html">Sorting Orders</a> for more details.</td><td>no, default: "lexicographic"</td></tr> |
| <tr><td>extractionFn</td><td><a href="#filtering-with-extraction-functions">Extraction function</a></td><td>Extraction function to apply to the dimension</td><td>no</td></tr> |
| </tbody> |
| </table> |
| <p>Bound filters support the use of extraction functions, see <a href="#filtering-with-extraction-functions">Filtering with Extraction Functions</a> for details.</p> |
| <p>The following bound filter expresses the condition <code>21 <= age <= 31</code>:</p> |
| <pre><code class="hljs css language-json">{ |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"bound"</span>, |
| <span class="hljs-attr">"dimension"</span>: <span class="hljs-string">"age"</span>, |
| <span class="hljs-attr">"lower"</span>: <span class="hljs-string">"21"</span>, |
| <span class="hljs-attr">"upper"</span>: <span class="hljs-string">"31"</span> , |
| <span class="hljs-attr">"ordering"</span>: <span class="hljs-string">"numeric"</span> |
| } |
| </code></pre> |
| <p>This filter expresses the condition <code>foo <= name <= hoo</code>, using the default lexicographic sorting order.</p> |
| <pre><code class="hljs css language-json">{ |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"bound"</span>, |
| <span class="hljs-attr">"dimension"</span>: <span class="hljs-string">"name"</span>, |
| <span class="hljs-attr">"lower"</span>: <span class="hljs-string">"foo"</span>, |
| <span class="hljs-attr">"upper"</span>: <span class="hljs-string">"hoo"</span> |
| } |
| </code></pre> |
| <p>Using strict bounds, this filter expresses the condition <code>21 < age < 31</code></p> |
| <pre><code class="hljs css language-json">{ |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"bound"</span>, |
| <span class="hljs-attr">"dimension"</span>: <span class="hljs-string">"age"</span>, |
| <span class="hljs-attr">"lower"</span>: <span class="hljs-string">"21"</span>, |
| <span class="hljs-attr">"lowerStrict"</span>: <span class="hljs-literal">true</span>, |
| <span class="hljs-attr">"upper"</span>: <span class="hljs-string">"31"</span> , |
| <span class="hljs-attr">"upperStrict"</span>: <span class="hljs-literal">true</span>, |
| <span class="hljs-attr">"ordering"</span>: <span class="hljs-string">"numeric"</span> |
| } |
| </code></pre> |
| <p>The user can also specify a one-sided bound by omitting "upper" or "lower". This filter expresses <code>age < 31</code>.</p> |
| <pre><code class="hljs css language-json">{ |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"bound"</span>, |
| <span class="hljs-attr">"dimension"</span>: <span class="hljs-string">"age"</span>, |
| <span class="hljs-attr">"upper"</span>: <span class="hljs-string">"31"</span> , |
| <span class="hljs-attr">"upperStrict"</span>: <span class="hljs-literal">true</span>, |
| <span class="hljs-attr">"ordering"</span>: <span class="hljs-string">"numeric"</span> |
| } |
| </code></pre> |
| <p>Likewise, this filter expresses <code>age >= 18</code></p> |
| <pre><code class="hljs css language-json">{ |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"bound"</span>, |
| <span class="hljs-attr">"dimension"</span>: <span class="hljs-string">"age"</span>, |
| <span class="hljs-attr">"lower"</span>: <span class="hljs-string">"18"</span> , |
| <span class="hljs-attr">"ordering"</span>: <span class="hljs-string">"numeric"</span> |
| } |
| </code></pre> |
| <h3><a class="anchor" aria-hidden="true" id="interval-filter"></a><a href="#interval-filter" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Interval Filter</h3> |
| <p>The Interval filter enables range filtering on columns that contain long millisecond values, with the boundaries specified as ISO 8601 time intervals. It is suitable for the <code>__time</code> column, long metric columns, and dimensions with values that can be parsed as long milliseconds.</p> |
| <p>This filter converts the ISO 8601 intervals to long millisecond start/end ranges and translates to an OR of Bound filters on those millisecond ranges, with numeric comparison. The Bound filters will have left-closed and right-open matching (i.e., start <= time < end).</p> |
| <table> |
| <thead> |
| <tr><th>property</th><th>type</th><th>description</th><th>required?</th></tr> |
| </thead> |
| <tbody> |
| <tr><td>type</td><td>String</td><td>This should always be "interval".</td><td>yes</td></tr> |
| <tr><td>dimension</td><td>String</td><td>The dimension to filter on</td><td>yes</td></tr> |
| <tr><td>intervals</td><td>Array</td><td>A JSON array containing ISO-8601 interval strings. This defines the time ranges to filter on.</td><td>yes</td></tr> |
| <tr><td>extractionFn</td><td><a href="#filtering-with-extraction-functions">Extraction function</a></td><td>Extraction function to apply to the dimension</td><td>no</td></tr> |
| </tbody> |
| </table> |
| <p>The interval filter supports the use of extraction functions, see <a href="#filtering-with-extraction-functions">Filtering with Extraction Functions</a> for details.</p> |
| <p>If an extraction function is used with this filter, the extraction function should output values that are parseable as long milliseconds.</p> |
| <p>The following example filters on the time ranges of October 1-7, 2014 and November 15-16, 2014.</p> |
| <pre><code class="hljs css language-json">{ |
| <span class="hljs-attr">"type"</span> : <span class="hljs-string">"interval"</span>, |
| <span class="hljs-attr">"dimension"</span> : <span class="hljs-string">"__time"</span>, |
| <span class="hljs-attr">"intervals"</span> : [ |
| <span class="hljs-string">"2014-10-01T00:00:00.000Z/2014-10-07T00:00:00.000Z"</span>, |
| <span class="hljs-string">"2014-11-15T00:00:00.000Z/2014-11-16T00:00:00.000Z"</span> |
| ] |
| } |
| </code></pre> |
| <p>The filter above is equivalent to the following OR of Bound filters:</p> |
| <pre><code class="hljs css language-json">{ |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"or"</span>, |
| <span class="hljs-attr">"fields"</span>: [ |
| { |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"bound"</span>, |
| <span class="hljs-attr">"dimension"</span>: <span class="hljs-string">"__time"</span>, |
| <span class="hljs-attr">"lower"</span>: <span class="hljs-string">"1412121600000"</span>, |
| <span class="hljs-attr">"lowerStrict"</span>: <span class="hljs-literal">false</span>, |
| <span class="hljs-attr">"upper"</span>: <span class="hljs-string">"1412640000000"</span> , |
| <span class="hljs-attr">"upperStrict"</span>: <span class="hljs-literal">true</span>, |
| <span class="hljs-attr">"ordering"</span>: <span class="hljs-string">"numeric"</span> |
| }, |
| { |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"bound"</span>, |
| <span class="hljs-attr">"dimension"</span>: <span class="hljs-string">"__time"</span>, |
| <span class="hljs-attr">"lower"</span>: <span class="hljs-string">"1416009600000"</span>, |
| <span class="hljs-attr">"lowerStrict"</span>: <span class="hljs-literal">false</span>, |
| <span class="hljs-attr">"upper"</span>: <span class="hljs-string">"1416096000000"</span> , |
| <span class="hljs-attr">"upperStrict"</span>: <span class="hljs-literal">true</span>, |
| <span class="hljs-attr">"ordering"</span>: <span class="hljs-string">"numeric"</span> |
| } |
| ] |
| } |
| </code></pre> |
| <h3><a class="anchor" aria-hidden="true" id="filtering-with-extraction-functions"></a><a href="#filtering-with-extraction-functions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Filtering with Extraction Functions</h3> |
| <p>All filters except the "spatial" filter support extraction functions. |
| An extraction function is defined by setting the "extractionFn" field on a filter. |
| See <a href="./dimensionspecs.html#extraction-functions">Extraction function</a> for more details on extraction functions.</p> |
| <p>If specified, the extraction function will be used to transform input values before the filter is applied. |
| The example below shows a selector filter combined with an extraction function. This filter will transform input values |
| according to the values defined in the lookup map; transformed values will then be matched with the string "bar_1".</p> |
| <p><strong>Example</strong> |
| The following matches dimension values in <code>[product_1, product_3, product_5]</code> for the column <code>product</code></p> |
| <pre><code class="hljs css language-json">{ |
| <span class="hljs-attr">"filter"</span>: { |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"selector"</span>, |
| <span class="hljs-attr">"dimension"</span>: <span class="hljs-string">"product"</span>, |
| <span class="hljs-attr">"value"</span>: <span class="hljs-string">"bar_1"</span>, |
| <span class="hljs-attr">"extractionFn"</span>: { |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"lookup"</span>, |
| <span class="hljs-attr">"lookup"</span>: { |
| <span class="hljs-attr">"type"</span>: <span class="hljs-string">"map"</span>, |
| <span class="hljs-attr">"map"</span>: { |
| <span class="hljs-attr">"product_1"</span>: <span class="hljs-string">"bar_1"</span>, |
| <span class="hljs-attr">"product_5"</span>: <span class="hljs-string">"bar_1"</span>, |
| <span class="hljs-attr">"product_3"</span>: <span class="hljs-string">"bar_1"</span> |
| } |
| } |
| } |
| } |
| } |
| </code></pre> |
| <h2><a class="anchor" aria-hidden="true" id="column-types"></a><a href="#column-types" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Column types</h2> |
| <p>Druid supports filtering on timestamp, string, long, and float columns.</p> |
| <p>Note that only string columns have bitmap indexes. Therefore, queries that filter on other column types will need to |
| scan those columns.</p> |
| <h3><a class="anchor" aria-hidden="true" id="filtering-on-numeric-columns"></a><a href="#filtering-on-numeric-columns" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Filtering on numeric columns</h3> |
| <p>When filtering on numeric columns, you can write filters as if they were strings. In most cases, your filter will be |
| converted into a numeric predicate and will be applied to the numeric column values directly. In some cases (such as |
| the "regex" filter) the numeric column values will be converted to strings during the scan.</p> |
| <p>For example, filtering on a specific value, <code>myFloatColumn = 10.1</code>:</p> |
| <pre><code class="hljs css language-json">"filter": { |
| "type": "selector", |
| "dimension": "myFloatColumn", |
| "value": "10.1" |
| } |
| </code></pre> |
| <p>Filtering on a range of values, <code>10 <= myFloatColumn < 20</code>:</p> |
| <pre><code class="hljs css language-json">"filter": { |
| "type": "bound", |
| "dimension": "myFloatColumn", |
| "ordering": "numeric", |
| "lower": "10", |
| "lowerStrict": false, |
| "upper": "20", |
| "upperStrict": true |
| } |
| </code></pre> |
| <h3><a class="anchor" aria-hidden="true" id="filtering-on-the-timestamp-column"></a><a href="#filtering-on-the-timestamp-column" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Filtering on the Timestamp Column</h3> |
| <p>Query filters can also be applied to the timestamp column. The timestamp column has long millisecond values. To refer |
| to the timestamp column, use the string <code>__time</code> as the dimension name. Like numeric dimensions, timestamp filters |
| should be specified as if the timestamp values were strings.</p> |
| <p>If the user wishes to interpret the timestamp with a specific format, timezone, or locale, the <a href="./dimensionspecs.html#time-format-extraction-function">Time Format Extraction Function</a> is useful.</p> |
| <p>For example, filtering on a long timestamp value:</p> |
| <pre><code class="hljs css language-json">"filter": { |
| "type": "selector", |
| "dimension": "__time", |
| "value": "124457387532" |
| } |
| </code></pre> |
| <p>Filtering on day of week:</p> |
| <pre><code class="hljs css language-json">"filter": { |
| "type": "selector", |
| "dimension": "__time", |
| "value": "Friday", |
| "extractionFn": { |
| "type": "timeFormat", |
| "format": "EEEE", |
| "timeZone": "America/New_York", |
| "locale": "en" |
| } |
| } |
| </code></pre> |
| <p>Filtering on a set of ISO 8601 intervals:</p> |
| <pre><code class="hljs css language-json">{ |
| <span class="hljs-attr">"type"</span> : <span class="hljs-string">"interval"</span>, |
| <span class="hljs-attr">"dimension"</span> : <span class="hljs-string">"__time"</span>, |
| <span class="hljs-attr">"intervals"</span> : [ |
| <span class="hljs-string">"2014-10-01T00:00:00.000Z/2014-10-07T00:00:00.000Z"</span>, |
| <span class="hljs-string">"2014-11-15T00:00:00.000Z/2014-11-16T00:00:00.000Z"</span> |
| ] |
| } |
| </code></pre> |
| <h3><a class="anchor" aria-hidden="true" id="true-filter"></a><a href="#true-filter" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>True Filter</h3> |
| <p>The true filter is a filter which matches all values. It can be used to temporarily disable other filters without removing the filter.</p> |
| <pre><code class="hljs css language-json"> |
| { <span class="hljs-attr">"type"</span> : <span class="hljs-string">"true"</span> } |
| </code></pre> |
| </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/0.16.0-incubating/querying/dimensionspecs.html"><span class="arrow-prev">← </span><span>Transforming Dimension Values</span></a><a class="docs-next button" href="/docs/0.16.0-incubating/querying/granularities.html"><span>Aggregation Granularity</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#column-types">Column types</a><ul class="toc-headings"><li><a href="#filtering-on-numeric-columns">Filtering on numeric columns</a></li><li><a href="#filtering-on-the-timestamp-column">Filtering on the Timestamp Column</a></li><li><a href="#true-filter">True Filter</a></li></ul></li></ul></nav></div><footer class="nav-footer druid-footer" id="footer"><div class="container"><div class="text-center"><p><a href="/technology">Technology</a> · <a href="/use-cases">Use Cases</a> · <a href="/druid-powered">Powered by Druid</a> · <a href="/docs/0.16.0-incubating/latest">Docs</a> · <a href="/community/">Community</a> · <a href="/downloads.html">Download</a> · <a href="/faq">FAQ</a></p></div><div class="text-center"><a title="Join the user group" href="https://groups.google.com/forum/#!forum/druid-user" target="_blank"><span class="fa fa-comments"></span></a> · <a title="Follow Druid" href="https://twitter.com/druidio" target="_blank"><span class="fab fa-twitter"></span></a> · <a title="Download via Apache" href="https://www.apache.org/dyn/closer.cgi?path=/incubator/druid/{{ site.druid_versions[0].versions[0].version }}/apache-druid-{{ site.druid_versions[0].versions[0].version }}-bin.tar.gz" target="_blank"><span class="fas fa-feather"></span></a> · <a title="GitHub" href="https://github.com/apache/incubator-druid" target="_blank"><span class="fab fa-github"></span></a></div><div class="text-center license">Copyright © 2019 <a href="https://www.apache.org/" target="_blank">Apache Software Foundation</a>.<br/>Except where otherwise noted, licensed under <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>.<br/>Apache Druid, Druid, and the Druid logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.</div></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script> |
| document.addEventListener('keyup', function(e) { |
| if (e.target !== document.body) { |
| return; |
| } |
| // keyCode for '/' (slash) |
| if (e.keyCode === 191) { |
| const search = document.getElementById('search_input_react'); |
| search && search.focus(); |
| } |
| }); |
| </script><script> |
| var search = docsearch({ |
| |
| apiKey: '2de99082a9f38e49dfaa059bbe4c901d', |
| indexName: 'apache_druid', |
| inputSelector: '#search_input_react', |
| algoliaOptions: {"facetFilters":["language:en","version:0.16.0-incubating"]} |
| }); |
| </script></body></html> |