fix upsert data issue

Summary:
fix upsert data issue due to default set creation is not thread safe
also refactor some code, abstact a new class and added documentation and tests

Reviewers: bzzhang, tingchen, #streaming_pinot

Reviewed By: bzzhang, #streaming_pinot

Differential Revision: https://code.uberinternal.com/D3915319
33 files changed
tree: f3b7338b65a9f9d778c46fe567f2ac2f713f4263
  1. .arcconfig
  2. .codecov.yml
  3. .codecov_bash
  4. .gitignore
  5. .jenkins/
  6. .travis.yml
  7. .travis_install.sh
  8. .travis_test.sh
  9. DISCLAIMER
  10. HEADER
  11. LICENSE
  12. LICENSE-binary
  13. NOTICE
  14. NOTICE-binary
  15. README.md
  16. UBER_README.md
  17. config/
  18. contrib/
  19. docker/
  20. docs/
  21. licenses-binary/
  22. licenses/
  23. pinot-api/
  24. pinot-azure-filesystem/
  25. pinot-broker/
  26. pinot-common/
  27. pinot-connectors/
  28. pinot-controller/
  29. pinot-core/
  30. pinot-distribution/
  31. pinot-grigio/
  32. pinot-hadoop-filesystem/
  33. pinot-hadoop/
  34. pinot-integration-tests/
  35. pinot-minion/
  36. pinot-orc/
  37. pinot-parquet/
  38. pinot-perf/
  39. pinot-server/
  40. pinot-tools/
  41. pinot-transport/
  42. pom.xml
  43. rstheaderdefinition.xml
  44. thirdeye/
README.md

Apache Pinot (incubating)

Build Status codecov.io Join the chat at https://gitter.im/linkedin/pinot license

Apache Pinot is a realtime distributed OLAP datastore, which is used to deliver scalable real time analytics with low latency. It can ingest data from offline data sources (such as Hadoop and flat files) as well as online sources (such as Kafka). Pinot is designed to scale horizontally.

These presentations on Pinot give an overview of Pinot:

Looking for the ThirdEye anomaly detection and root-cause analysis platform? Check out the Pinot/ThirdEye project

Key Features

  • A column-oriented database with various compression schemes such as Run Length, Fixed Bit Length
  • Pluggable indexing technologies - Sorted Index, Bitmap Index, Inverted Index
  • Ability to optimize query/execution plan based on query and segment metadata
  • Near real time ingestion from Kafka and batch ingestion from Hadoop
  • SQL like language that supports selection, aggregation, filtering, group by, order by, distinct queries on fact data
  • Support for multivalued fields
  • Horizontally scalable and fault tolerant

Because of the design choices we made to achieve these goals, there are certain limitations present in Pinot:

  • Pinot is not a replacement for database i.e it cannot be used as source of truth store, cannot mutate data
  • Not a replacement for search engine i.e full text search, relevance not supported
  • Query cannot span across multiple tables

Pinot works very well for querying time series data with lots of Dimensions and Metrics. Example - Query (profile views, ad campaign performance, etc.) in an analytical fashion (who viewed this profile in the last weeks, how many ads were clicked per campaign).

Instructions to build Pinot

More detailed instructions can be found at Quick Demo section in the documentation.

# Clone a repo
$ git clone https://github.com/apache/incubator-pinot.git
$ cd incubator-pinot

# Build Pinot
$ mvn clean install -DskipTests -Pbin-dist

# Run Quck Demo
$ cd pinot-distribution/target/apache-pinot-incubating-<version>-SNAPSHOT-bin
$ bin/quick-start-offline.sh

Getting Involved

Documentation

Check out Pinot documentation for a complete description of Pinot's features.

License

Apache Pinot is under Apache License, Version 2.0