datajunction-server 0.0.1a85__tar.gz → 0.0.1a85.dev0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/PKG-INFO +2 -2
- datajunction_server-0.0.1a85.dev0/datajunction_server/__about__.py +4 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/cubes.py +100 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/data.py +4 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/metricmetadata.py +7 -3
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/helpers.py +2 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/materializations.py +37 -6
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/construction/build.py +2 -1
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/construction/build_v2.py +10 -1
- datajunction_server-0.0.1a85.dev0/datajunction_server/internal/cube_materializations.py +271 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/materializations.py +27 -7
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/materialization/jobs/cube_materialization.py +49 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/materialization/jobs/materialization_job.py +2 -0
- datajunction_server-0.0.1a85.dev0/datajunction_server/models/cube_materialization.py +424 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/materialization.py +11 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/metric.py +2 -1
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/node_type.py +12 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/sql.py +4 -12
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/service_clients.py +116 -4
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/decompose.py +5 -47
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/utils.py +3 -1
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/cubes_test.py +973 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/materializations_test.py +325 -1
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/nodes_test.py +1 -1
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/conftest.py +58 -5
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/service_clients_test.py +88 -3
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/decompose_test.py +2 -2
- datajunction_server-0.0.1a85/datajunction_server/__about__.py +0 -4
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/.coveragerc +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/.env +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/.env.integration +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/.flake8 +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/.gitignore +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/.isort.cfg +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/.pre-commit-config.yaml +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/Dockerfile +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/Makefile +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/README.md +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/README +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/env.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/script.py.mako +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2023_12_20_1829-724445d2b29d_initial_migration.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_01_08_2034-945d44abcd32_add_dimension_links.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_01_11_2032-c74b11566d82_add_column_order.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_01_18_2011-20f060b02772_switch_enum_values.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_01_23_0617-c9cef8864ecb_add_missing_table_attribute_to_source_.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_01_23_1655-a8e22109be24_availability_state_s_valid_through_ts_.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_02_22_0713-d61fb7e48cc3_cascade_deletes_to_dimension_links.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_04_30_1556-de7ec1c82fe0_add_query_requests.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_05_09_1420-9b1227ff17f4_update_backfill_spec.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_05_21_0012-57fc93ef6947_add_query_id_to_queryrequest.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_06_21_1301-640a814db2d8_add_collection_tables.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_07_12_0348-34171c92dd6d_set_user_username_to_be_unique.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_08_18_0036-f3c9b40deb6f_add_create_by_to_nodes_node_revisions_.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_10_24_0015-4d6ab789e456_add_a_map_of_links_to_availability_state.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_10_26_0340-70904373eab3_add_indexes_on_history_and_node_tables.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2025_01_19_1808-9650f9b728a2_add_query_ast_for_noderevision.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2025_01_24_0020-bec3296d7537_add_custom_metadata_field_to_nodes.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic.ini +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/access/authentication/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/access/authentication/basic.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/access/authentication/github.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/access/authentication/google.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/access/authentication/whoami.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/attributes.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/catalogs.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/client.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/collection.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/dimensions.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/djsql.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/engines.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/main.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/queries/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/queries/catalogs.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/queries/dag.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/queries/engines.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/queries/nodes.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/queries/sql.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/queries/tags.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/resolvers/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/resolvers/nodes.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/resolvers/tags.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/availabilitystate.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/catalog_engine.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/column.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/errors.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/materialization.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/node.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/sql.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/tag.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/user.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/utils.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/health.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/history.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/logging.conf +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/main.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/measures.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/metrics.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/namespaces.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/nodes.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/notification.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/sql.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/tags.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/users.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/config.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/constants.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/construction/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/construction/dimensions.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/construction/dj_query.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/construction/exceptions.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/construction/utils.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/attributetype.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/availabilitystate.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/backfill.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/base.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/catalog.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/collection.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/column.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/database.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/dimensionlink.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/engine.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/history.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/materialization.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/measure.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/metricmetadata.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/namespace.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/node.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/partition.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/queryrequest.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/tag.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/user.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/enum.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/errors.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/authentication/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/authentication/basic.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/authentication/github.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/authentication/google.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/authentication/http.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/authentication/tokens.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/authorization.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/client.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/engines.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/namespaces.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/nodes.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/client_setup.j2 +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/create_cube.j2 +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/create_dimension.j2 +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/create_metric.j2 +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/create_transform.j2 +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/link_dimension.j2 +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/namespace_mapping.j2 +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/register_table.j2 +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/set_column_attributes.j2 +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/validation.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/materialization/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/materialization/jobs/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/materialization/jobs/job_types.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/access.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/attribute.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/base.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/catalog.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/collection.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/column.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/cube.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/database.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/dimensionlink.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/engine.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/history.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/measure.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/node.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/partition.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/query.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/table.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/tag.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/user.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/naming.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/dag.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/functions.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/ast.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/antlr4.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/exceptions.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/SqlBaseLexer.g4 +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/SqlBaseParser.g4 +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.interp +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.tokens +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.interp +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.tokens +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserListener.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserVisitor.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/types.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/superset.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/transpilation.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/typing.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/init_data/seed.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/pdm.lock +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/pyproject.toml +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/requirements/docker.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/requirements/test.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/scripts/docs-snippets.js +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/scripts/docs-snippets.sh +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/scripts/generate-openapi.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/access_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/attributes_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/catalog_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/client_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/collections_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/data_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/dimension_links_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/dimensions_access_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/dimensions_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/djql_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/engine_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_cube.repairs_cube.namespace.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_cube.repairs_cube.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_dimension.repair_order.namespace.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_dimension.repair_order.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_metric.num_repair_orders.namespace.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_metric.num_repair_orders.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_transform.regional_level_agg.namespace.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_transform.regional_level_agg.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/dimension_links.repair_orders.namespace.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/dimension_links.repair_orders.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/include_client_setup.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/notebook.create_cube.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/notebook.create_transform.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/notebook.link_dimension.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/notebook.set_attribute.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/register_table.txt +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.druid_spec.json +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.partition.druid_spec.json +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.partition.query.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.query.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.categorical.query.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.druid_spec.json +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.patched.query.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.query.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_metrics_cube.incremental.categorical.query.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_metrics_cube.incremental.druid_spec.json +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_metrics_cube.incremental.query.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.full.config.json +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.full.materializations.json +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.full.partition.config.json +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.full.partition.materializations.json +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.full.partition.query.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.full.query.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.incremental.additional.query.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.incremental.categorical.query.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.incremental.config.json +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.incremental.lookback.query.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.incremental.query.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/graphql/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/graphql/catalog_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/graphql/common_dimensions_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/graphql/engine_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/graphql/find_nodes_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/graphql/measures_sql_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/graphql/tags_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/health_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/helpers_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/history_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/measures_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/metrics_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/namespaces_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/nodes_update_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/notification_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/routers_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/sql_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/sql_v2_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/tags_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/users_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/build_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/build_v2_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/compile_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/exceptions_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/fixtures.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/inference_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/utils_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/default.duckdb +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/duckdb.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/errors_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/examples.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/integration/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/integration/basic_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/internal/authentication/basic_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/internal/authentication/github_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/internal/authentication/http_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/internal/authentication/token_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/internal/authentication/whoami_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/migrations_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/models/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/models/catalog_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/models/hash_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/models/measure_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/models/node_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/models/query_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/dag_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/functions_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/backends/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/backends/antlr4_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/backends/types_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/__init__.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query1.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query10.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query11.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query12.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query13.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query14.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query15.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query16.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query17.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query18.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query19.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query2.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query20.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query21.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query22.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query23.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query24.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query25.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query26.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query27.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query28.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query29.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query3.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query30.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query31.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query32.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query33.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query34.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query35.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query36.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query37.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query38.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query39.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query4.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query40.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query41.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query42.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query43.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query44.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query45.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query46.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query47.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query48.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query49.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query5.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query50.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query51.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query52.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query53.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query54.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query55.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query56.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query57.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query58.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query59.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query6.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query60.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query61.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query62.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query63.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query64.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query65.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query66.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query67.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query68.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query69.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query7.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query70.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query71.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query72.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query73.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query74.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query75.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query76.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query77.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query78.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query79.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query8.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query80.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query81.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query82.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query83.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query84.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query85.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query86.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query87.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query88.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query89.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query9.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query90.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query91.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query92.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query93.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query94.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query95.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query96.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query97.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query98.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query99.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query1.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query10.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query11.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query12.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query13.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query14.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query15.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query16.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query17.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query18.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query19.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query2.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query20.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query21.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query22.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query23.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query24.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query25.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query26.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query27.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query28.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query29.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query3.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query30.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query31.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query32.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query33.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query34.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query35.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query36.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query37.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query38.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query39.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query4.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query40.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query41.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query42.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query43.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query44.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query45.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query46.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query47.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query48.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query49.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query5.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query50.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query51.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query52.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query53.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query54.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query55.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query56.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query57.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query58.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query59.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query6.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query60.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query61.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query62.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query63.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query64.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query65.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query66.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query67.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query68.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query69.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query7.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query70.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query71.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query72.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query73.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query74.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query75.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query76.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query77.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query78.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query79.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query8.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query80.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query81.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query82.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query83.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query84.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query85.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query86.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query87.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query88.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query89.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query9.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query90.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query91.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query92.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query93.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query94.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query95.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query96.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query97.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query98.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query99.sql +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/test_tpcds.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/test_ast.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/utils.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/superset_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/transpilation_test.py +0 -0
- {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/utils_test.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
2
|
Name: datajunction-server
|
|
3
|
-
Version: 0.0.1a85
|
|
3
|
+
Version: 0.0.1a85.dev0
|
|
4
4
|
Summary: DataJunction server library for running to a DataJunction server
|
|
5
5
|
Project-URL: Homepage, https://datajunction.io
|
|
6
6
|
Project-URL: Repository, https://github.com/DataJunction/dj
|
{datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/cubes.py
RENAMED
|
@@ -12,8 +12,10 @@ from datajunction_server.api.helpers import get_catalog_by_name
|
|
|
12
12
|
from datajunction_server.construction.dimensions import build_dimensions_from_cube_query
|
|
13
13
|
from datajunction_server.database.node import Node
|
|
14
14
|
from datajunction_server.database.user import User
|
|
15
|
+
from datajunction_server.errors import DJInvalidInputException
|
|
15
16
|
from datajunction_server.internal.access.authentication.http import SecureAPIRouter
|
|
16
17
|
from datajunction_server.internal.access.authorization import validate_access
|
|
18
|
+
from datajunction_server.internal.materializations import build_cube_materialization
|
|
17
19
|
from datajunction_server.internal.nodes import get_cube_revision_metadata
|
|
18
20
|
from datajunction_server.models import access
|
|
19
21
|
from datajunction_server.models.cube import (
|
|
@@ -21,6 +23,15 @@ from datajunction_server.models.cube import (
|
|
|
21
23
|
DimensionValue,
|
|
22
24
|
DimensionValues,
|
|
23
25
|
)
|
|
26
|
+
from datajunction_server.models.cube_materialization import (
|
|
27
|
+
DruidCubeMaterializationInput,
|
|
28
|
+
UpsertCubeMaterialization,
|
|
29
|
+
)
|
|
30
|
+
from datajunction_server.models.materialization import (
|
|
31
|
+
Granularity,
|
|
32
|
+
MaterializationJobTypeEnum,
|
|
33
|
+
MaterializationStrategy,
|
|
34
|
+
)
|
|
24
35
|
from datajunction_server.models.metric import TranslatedSQL
|
|
25
36
|
from datajunction_server.models.query import QueryCreate
|
|
26
37
|
from datajunction_server.naming import from_amenable_name
|
|
@@ -47,6 +58,95 @@ async def get_cube(
|
|
|
47
58
|
return await get_cube_revision_metadata(session, name)
|
|
48
59
|
|
|
49
60
|
|
|
61
|
+
@router.get("/cubes/{name}/materialization", name="Cube Materialization Config")
|
|
62
|
+
async def cube_materialization_info(
|
|
63
|
+
name: str,
|
|
64
|
+
session: AsyncSession = Depends(get_session),
|
|
65
|
+
) -> DruidCubeMaterializationInput:
|
|
66
|
+
"""
|
|
67
|
+
The standard cube materialization config. DJ makes sensible materialization choices
|
|
68
|
+
where possible.
|
|
69
|
+
|
|
70
|
+
Requirements:
|
|
71
|
+
- The cube must have a temporal partition column specified.
|
|
72
|
+
- The job strategy will always be "incremental time".
|
|
73
|
+
|
|
74
|
+
Outputs:
|
|
75
|
+
"measures_materializations":
|
|
76
|
+
We group the metrics by parent node. Then we try to pre-aggregate each parent node as
|
|
77
|
+
much as possible to prepare for metric queries on the cube's dimensions.
|
|
78
|
+
"combiners":
|
|
79
|
+
We combine each set of measures materializations on their shared grain. Note that we don't
|
|
80
|
+
support materializing cubes with measures materializations that don't share the same grain.
|
|
81
|
+
However, we keep `combiners` as a list in the eventual future where we support that.
|
|
82
|
+
"metrics":
|
|
83
|
+
We include a list of metrics, their required measures, and the derived expression (e.g., the
|
|
84
|
+
expression used by the metric that makes use of the pre-aggregated measures)
|
|
85
|
+
|
|
86
|
+
Once we create a scheduled materialization workflow, we freeze the metadata for that particular
|
|
87
|
+
materialized dataset. This allows us to reconstruct metrics SQL from the dataset when needed.
|
|
88
|
+
To request metrics from the materialized cube, use the metrics' measures metadata.
|
|
89
|
+
"""
|
|
90
|
+
node = await Node.get_cube_by_name(session, name)
|
|
91
|
+
temporal_partitions = node.current.temporal_partition_columns() # type: ignore
|
|
92
|
+
if len(temporal_partitions) != 1:
|
|
93
|
+
raise DJInvalidInputException(
|
|
94
|
+
"The cube must have a single temporal partition column set "
|
|
95
|
+
"in order for it to be materialized.",
|
|
96
|
+
)
|
|
97
|
+
temporal_partition = temporal_partitions[0] if temporal_partitions else None
|
|
98
|
+
granularity_lookback_defaults = {
|
|
99
|
+
Granularity.MINUTE: "1 MINUTE",
|
|
100
|
+
Granularity.HOUR: "1 HOUR",
|
|
101
|
+
Granularity.DAY: "1 DAY",
|
|
102
|
+
Granularity.WEEK: "1 WEEK",
|
|
103
|
+
Granularity.MONTH: "1 MONTH",
|
|
104
|
+
Granularity.QUARTER: "1 QUARTER",
|
|
105
|
+
Granularity.YEAR: "1 YEAR",
|
|
106
|
+
}
|
|
107
|
+
granularity_cron_defaults = {
|
|
108
|
+
Granularity.MINUTE: "* * * * *", # Runs every minute
|
|
109
|
+
Granularity.HOUR: "0 * * * *", # Runs at the start of every hour
|
|
110
|
+
Granularity.DAY: "0 0 * * *", # Runs at midnight every day
|
|
111
|
+
Granularity.WEEK: "0 0 * * 0", # Runs at midnight on Sundays
|
|
112
|
+
Granularity.MONTH: "0 0 1 * *", # Runs at midnight on the first of every month
|
|
113
|
+
Granularity.QUARTER: "0 0 1 */3 *", # Runs at midnight on the first day of each quarter
|
|
114
|
+
Granularity.YEAR: "0 0 1 1 *", # Runs at midnight on January 1st every year
|
|
115
|
+
}
|
|
116
|
+
upsert = UpsertCubeMaterialization(
|
|
117
|
+
job=MaterializationJobTypeEnum.DRUID_CUBE,
|
|
118
|
+
strategy=(
|
|
119
|
+
MaterializationStrategy.INCREMENTAL_TIME
|
|
120
|
+
if temporal_partition
|
|
121
|
+
else MaterializationStrategy.FULL
|
|
122
|
+
),
|
|
123
|
+
lookback_window=granularity_lookback_defaults.get(
|
|
124
|
+
temporal_partition.partition.granularity,
|
|
125
|
+
granularity_lookback_defaults[Granularity.DAY],
|
|
126
|
+
),
|
|
127
|
+
schedule=granularity_cron_defaults.get(
|
|
128
|
+
temporal_partition.partition.granularity,
|
|
129
|
+
granularity_cron_defaults[Granularity.DAY],
|
|
130
|
+
),
|
|
131
|
+
)
|
|
132
|
+
cube_config = await build_cube_materialization(
|
|
133
|
+
session,
|
|
134
|
+
node.current, # type: ignore
|
|
135
|
+
upsert,
|
|
136
|
+
)
|
|
137
|
+
return DruidCubeMaterializationInput(
|
|
138
|
+
name="",
|
|
139
|
+
cube=cube_config.cube,
|
|
140
|
+
dimensions=cube_config.dimensions,
|
|
141
|
+
metrics=cube_config.metrics,
|
|
142
|
+
strategy=upsert.strategy,
|
|
143
|
+
schedule=upsert.schedule,
|
|
144
|
+
job=upsert.job.name,
|
|
145
|
+
measures_materializations=cube_config.measures_materializations,
|
|
146
|
+
combiners=cube_config.combiners,
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
|
|
50
150
|
@router.get("/cubes/{name}/dimensions/sql", name="Dimensions SQL for Cube")
|
|
51
151
|
async def get_cube_dimension_sql(
|
|
52
152
|
name: str,
|
{datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/data.py
RENAMED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"""
|
|
3
3
|
Data related APIs.
|
|
4
4
|
"""
|
|
5
|
+
import logging
|
|
5
6
|
from typing import Callable, Dict, List, Optional
|
|
6
7
|
|
|
7
8
|
from fastapi import BackgroundTasks, Depends, Query, Request
|
|
@@ -42,6 +43,8 @@ from datajunction_server.utils import (
|
|
|
42
43
|
get_settings,
|
|
43
44
|
)
|
|
44
45
|
|
|
46
|
+
_logger = logging.getLogger(__name__)
|
|
47
|
+
|
|
45
48
|
settings = get_settings()
|
|
46
49
|
router = SecureAPIRouter(tags=["data"])
|
|
47
50
|
|
|
@@ -61,6 +64,7 @@ async def add_availability_state(
|
|
|
61
64
|
"""
|
|
62
65
|
Add an availability state to a node.
|
|
63
66
|
"""
|
|
67
|
+
_logger.info("Storing availability for node=%s", node_name)
|
|
64
68
|
|
|
65
69
|
node = await Node.get_by_name(
|
|
66
70
|
session,
|
|
@@ -4,10 +4,14 @@ from typing import Optional
|
|
|
4
4
|
|
|
5
5
|
import strawberry
|
|
6
6
|
|
|
7
|
+
from datajunction_server.models.cube_materialization import (
|
|
8
|
+
Aggregability as Aggregability_,
|
|
9
|
+
)
|
|
10
|
+
from datajunction_server.models.cube_materialization import (
|
|
11
|
+
AggregationRule as AggregationRule_,
|
|
12
|
+
)
|
|
13
|
+
from datajunction_server.models.cube_materialization import Measure as Measure_
|
|
7
14
|
from datajunction_server.models.node import MetricDirection as MetricDirection_
|
|
8
|
-
from datajunction_server.sql.decompose import Aggregability as Aggregability_
|
|
9
|
-
from datajunction_server.sql.decompose import AggregationRule as AggregationRule_
|
|
10
|
-
from datajunction_server.sql.decompose import Measure as Measure_
|
|
11
15
|
|
|
12
16
|
MetricDirection = strawberry.enum(MetricDirection_)
|
|
13
17
|
Aggregability = strawberry.enum(Aggregability_)
|
|
@@ -366,6 +366,8 @@ async def validate_cube( # pylint: disable=too-many-locals
|
|
|
366
366
|
|
|
367
367
|
# Verify that the provided metrics are metric nodes
|
|
368
368
|
metrics: List[Column] = [metric.current.columns[0] for metric in metric_nodes]
|
|
369
|
+
for metric in metrics:
|
|
370
|
+
await session.refresh(metric, ["node_revisions"])
|
|
369
371
|
if not metrics:
|
|
370
372
|
raise DJInvalidInputException(
|
|
371
373
|
message=("At least one metric is required"),
|
|
@@ -27,6 +27,7 @@ from datajunction_server.internal.materializations import (
|
|
|
27
27
|
from datajunction_server.materialization.jobs import MaterializationJob
|
|
28
28
|
from datajunction_server.models import access
|
|
29
29
|
from datajunction_server.models.base import labelize
|
|
30
|
+
from datajunction_server.models.cube_materialization import UpsertCubeMaterialization
|
|
30
31
|
from datajunction_server.models.materialization import (
|
|
31
32
|
MaterializationConfigInfoUnified,
|
|
32
33
|
MaterializationConfigOutput,
|
|
@@ -80,7 +81,7 @@ def materialization_jobs_info() -> JSONResponse:
|
|
|
80
81
|
)
|
|
81
82
|
async def upsert_materialization( # pylint: disable=too-many-locals
|
|
82
83
|
node_name: str,
|
|
83
|
-
data: UpsertMaterialization,
|
|
84
|
+
data: UpsertMaterialization | UpsertCubeMaterialization,
|
|
84
85
|
*,
|
|
85
86
|
session: AsyncSession = Depends(get_session),
|
|
86
87
|
request: Request,
|
|
@@ -95,7 +96,7 @@ async def upsert_materialization( # pylint: disable=too-many-locals
|
|
|
95
96
|
for the materialization config, it will always update that named config.
|
|
96
97
|
"""
|
|
97
98
|
request_headers = dict(request.headers)
|
|
98
|
-
node = await Node.get_by_name(session, node_name)
|
|
99
|
+
node = await Node.get_by_name(session, node_name, raise_if_not_exists=True)
|
|
99
100
|
if node.type == NodeType.SOURCE: # type: ignore
|
|
100
101
|
raise DJInvalidInputException(
|
|
101
102
|
http_status_code=HTTPStatus.BAD_REQUEST,
|
|
@@ -103,6 +104,11 @@ async def upsert_materialization( # pylint: disable=too-many-locals
|
|
|
103
104
|
)
|
|
104
105
|
if node.type == NodeType.CUBE: # type: ignore
|
|
105
106
|
node = await Node.get_cube_by_name(session, node_name)
|
|
107
|
+
_logger.info(
|
|
108
|
+
"Upserting materialization for node=%s version=%s",
|
|
109
|
+
node.name, # type: ignore
|
|
110
|
+
node.current_version, # type: ignore
|
|
111
|
+
)
|
|
106
112
|
|
|
107
113
|
current_revision = node.current # type: ignore
|
|
108
114
|
old_materializations = {mat.name: mat for mat in current_revision.materializations}
|
|
@@ -131,6 +137,11 @@ async def upsert_materialization( # pylint: disable=too-many-locals
|
|
|
131
137
|
existing_materialization
|
|
132
138
|
and existing_materialization.config == new_materialization.config
|
|
133
139
|
):
|
|
140
|
+
_logger.info(
|
|
141
|
+
"Existing materialization found for node=%s version=%s",
|
|
142
|
+
node.name, # type: ignore
|
|
143
|
+
node.current_version, # type: ignore
|
|
144
|
+
)
|
|
134
145
|
new_materialization.node_revision = None # type: ignore
|
|
135
146
|
# if the materialization was deactivated before, restore it
|
|
136
147
|
if existing_materialization.deactivated_at is not None:
|
|
@@ -151,15 +162,20 @@ async def upsert_materialization( # pylint: disable=too-many-locals
|
|
|
151
162
|
existing_materialization_info = query_service_client.get_materialization_info(
|
|
152
163
|
node_name,
|
|
153
164
|
current_revision.version, # type: ignore
|
|
165
|
+
current_revision.type,
|
|
154
166
|
new_materialization.name, # type: ignore
|
|
155
167
|
request_headers=request_headers,
|
|
156
168
|
)
|
|
157
|
-
|
|
169
|
+
_logger.info(
|
|
170
|
+
"Refresh materialization workflows for node=%s version=%s",
|
|
171
|
+
node.name, # type: ignore
|
|
172
|
+
node.current_version, # type: ignore
|
|
173
|
+
)
|
|
158
174
|
await schedule_materialization_jobs(
|
|
159
175
|
session,
|
|
160
176
|
node_revision_id=current_revision.id,
|
|
161
177
|
materialization_names=[new_materialization.name],
|
|
162
|
-
query_service_client=
|
|
178
|
+
query_service_client=get_query_service_client(request), # type: ignore
|
|
163
179
|
request_headers=request_headers,
|
|
164
180
|
)
|
|
165
181
|
return JSONResponse(
|
|
@@ -178,12 +194,22 @@ async def upsert_materialization( # pylint: disable=too-many-locals
|
|
|
178
194
|
)
|
|
179
195
|
# If changes are detected, update the existing or save the new materialization
|
|
180
196
|
if existing_materialization:
|
|
197
|
+
_logger.info(
|
|
198
|
+
"Updating existing materialization for node=%s version=%s",
|
|
199
|
+
node.name, # type: ignore
|
|
200
|
+
node.current_version, # type: ignore
|
|
201
|
+
)
|
|
181
202
|
existing_materialization.config = new_materialization.config
|
|
182
203
|
existing_materialization.schedule = new_materialization.schedule
|
|
183
204
|
new_materialization.node_revision = None # type: ignore
|
|
184
205
|
new_materialization = existing_materialization
|
|
185
206
|
new_materialization.deactivated_at = None
|
|
186
207
|
else:
|
|
208
|
+
_logger.info(
|
|
209
|
+
"Adding new materialization for node=%s version=%s",
|
|
210
|
+
node.name, # type: ignore
|
|
211
|
+
node.current_version, # type: ignore
|
|
212
|
+
)
|
|
187
213
|
unchanged_existing_materializations = [
|
|
188
214
|
config
|
|
189
215
|
for config in current_revision.materializations
|
|
@@ -215,12 +241,16 @@ async def upsert_materialization( # pylint: disable=too-many-locals
|
|
|
215
241
|
),
|
|
216
242
|
)
|
|
217
243
|
await session.commit()
|
|
218
|
-
|
|
244
|
+
_logger.info(
|
|
245
|
+
"Scheduling materialization workflows for node=%s version=%s",
|
|
246
|
+
node.name, # type: ignore
|
|
247
|
+
node.current_version, # type: ignore
|
|
248
|
+
)
|
|
219
249
|
materialization_response = await schedule_materialization_jobs(
|
|
220
250
|
session,
|
|
221
251
|
node_revision_id=current_revision.id,
|
|
222
252
|
materialization_names=[new_materialization.name],
|
|
223
|
-
query_service_client=
|
|
253
|
+
query_service_client=get_query_service_client(request), # type: ignore
|
|
224
254
|
request_headers=request_headers,
|
|
225
255
|
)
|
|
226
256
|
return JSONResponse(
|
|
@@ -260,6 +290,7 @@ async def list_node_materializations(
|
|
|
260
290
|
info = query_service_client.get_materialization_info(
|
|
261
291
|
node_name,
|
|
262
292
|
node.current.version, # type: ignore
|
|
293
|
+
node.type, # type: ignore
|
|
263
294
|
materialization.name, # type: ignore
|
|
264
295
|
request_headers=request_headers,
|
|
265
296
|
)
|
|
@@ -14,12 +14,13 @@ from datajunction_server.database.node import Node, NodeRevision
|
|
|
14
14
|
from datajunction_server.errors import DJError, DJInvalidInputException, ErrorCode
|
|
15
15
|
from datajunction_server.internal.engines import get_engine
|
|
16
16
|
from datajunction_server.models import access
|
|
17
|
+
from datajunction_server.models.cube_materialization import Measure
|
|
17
18
|
from datajunction_server.models.engine import Dialect
|
|
18
19
|
from datajunction_server.models.materialization import GenericCubeConfig
|
|
19
20
|
from datajunction_server.models.node import BuildCriteria
|
|
20
21
|
from datajunction_server.naming import LOOKUP_CHARS, amenable_name, from_amenable_name
|
|
21
22
|
from datajunction_server.sql.dag import get_shared_dimensions
|
|
22
|
-
from datajunction_server.sql.decompose import
|
|
23
|
+
from datajunction_server.sql.decompose import MeasureExtractor
|
|
23
24
|
from datajunction_server.sql.parsing.backends.antlr4 import ast, parse
|
|
24
25
|
from datajunction_server.sql.parsing.types import ColumnType
|
|
25
26
|
from datajunction_server.utils import SEPARATOR
|
|
@@ -23,12 +23,12 @@ from datajunction_server.errors import (
|
|
|
23
23
|
from datajunction_server.internal.engines import get_engine
|
|
24
24
|
from datajunction_server.models import access
|
|
25
25
|
from datajunction_server.models.column import SemanticType
|
|
26
|
+
from datajunction_server.models.cube_materialization import Aggregability, Measure
|
|
26
27
|
from datajunction_server.models.engine import Dialect
|
|
27
28
|
from datajunction_server.models.node import BuildCriteria
|
|
28
29
|
from datajunction_server.models.node_type import NodeType
|
|
29
30
|
from datajunction_server.models.sql import GeneratedSQL
|
|
30
31
|
from datajunction_server.naming import amenable_name, from_amenable_name
|
|
31
|
-
from datajunction_server.sql.decompose import Aggregability, Measure
|
|
32
32
|
from datajunction_server.sql.parsing.ast import CompileContext
|
|
33
33
|
from datajunction_server.sql.parsing.backends.antlr4 import ast, cached_parse, parse
|
|
34
34
|
from datajunction_server.utils import SEPARATOR, refresh_if_needed
|
|
@@ -262,6 +262,15 @@ async def get_measures_query( # pylint: disable=too-many-locals
|
|
|
262
262
|
else [pk_col.name for pk_col in parent_node.current.primary_key()]
|
|
263
263
|
),
|
|
264
264
|
errors=query_builder.errors,
|
|
265
|
+
metrics={
|
|
266
|
+
metric.name: (
|
|
267
|
+
metrics2measures[metric.name][0],
|
|
268
|
+
str(metrics2measures[metric.name][1]).replace("\n", "")
|
|
269
|
+
if preaggregate
|
|
270
|
+
else metric.query,
|
|
271
|
+
)
|
|
272
|
+
for metric in children
|
|
273
|
+
},
|
|
265
274
|
),
|
|
266
275
|
)
|
|
267
276
|
return measures_queries
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
"""Helper functions related to cube materializations."""
|
|
2
|
+
import itertools
|
|
3
|
+
|
|
4
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
|
5
|
+
|
|
6
|
+
from datajunction_server.construction.build_v2 import get_measures_query
|
|
7
|
+
from datajunction_server.database.node import Column, NodeRevision
|
|
8
|
+
from datajunction_server.errors import DJInvalidInputException
|
|
9
|
+
from datajunction_server.models.column import SemanticType
|
|
10
|
+
from datajunction_server.models.cube_materialization import (
|
|
11
|
+
CombineMaterialization,
|
|
12
|
+
CubeMetric,
|
|
13
|
+
DruidCubeConfig,
|
|
14
|
+
MeasureKey,
|
|
15
|
+
MeasuresMaterialization,
|
|
16
|
+
UpsertCubeMaterialization,
|
|
17
|
+
)
|
|
18
|
+
from datajunction_server.models.node_type import NodeNameVersion
|
|
19
|
+
from datajunction_server.models.partition import Granularity
|
|
20
|
+
from datajunction_server.sql.parsing import ast
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def generate_partition_filter_sql(
|
|
24
|
+
temporal_partition: Column,
|
|
25
|
+
lookback_window: str,
|
|
26
|
+
) -> str:
|
|
27
|
+
"""
|
|
28
|
+
Generate filter SQL on partitions
|
|
29
|
+
"""
|
|
30
|
+
logical_ts = "CAST(DJ_LOGICAL_TIMESTAMP() AS TIMESTAMP)"
|
|
31
|
+
|
|
32
|
+
def _partition_sql(timestamp_expression, column_type):
|
|
33
|
+
return f"CAST(DATE_FORMAT({timestamp_expression}, 'yyyyMMdd') AS {column_type})"
|
|
34
|
+
|
|
35
|
+
partition_sql = _partition_sql(logical_ts, str(temporal_partition.type))
|
|
36
|
+
if temporal_partition.partition.granularity == Granularity.DAY and (
|
|
37
|
+
lookback_window == "1 DAY" or not lookback_window
|
|
38
|
+
):
|
|
39
|
+
return f"{temporal_partition.name} = {partition_sql}"
|
|
40
|
+
lookback_timestamp = (
|
|
41
|
+
f"{logical_ts} - INTERVAL {lookback_window}" # pragma: no cover
|
|
42
|
+
)
|
|
43
|
+
partition_start = _partition_sql( # pragma: no cover
|
|
44
|
+
lookback_timestamp,
|
|
45
|
+
str(temporal_partition.type),
|
|
46
|
+
)
|
|
47
|
+
return ( # pragma: no cover
|
|
48
|
+
f"{temporal_partition.name} BETWEEN {partition_start} AND {partition_sql}"
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def combine_measures_on_shared_grain(
|
|
53
|
+
measures_materializations: list[MeasuresMaterialization],
|
|
54
|
+
query_grain: list[str],
|
|
55
|
+
) -> ast.Query:
|
|
56
|
+
"""
|
|
57
|
+
Generate a query that combines measures datasets on their shared grain.
|
|
58
|
+
An example:
|
|
59
|
+
SELECT
|
|
60
|
+
COALESCE(measureA.grain1, measureB.grain1) grain1,
|
|
61
|
+
COALESCE(measureA.grain2, measureB.grain2) grain2,
|
|
62
|
+
measureA.one,
|
|
63
|
+
measureA.two,
|
|
64
|
+
measureB.three,
|
|
65
|
+
measureB.four
|
|
66
|
+
FROM measureA
|
|
67
|
+
JOIN measureB ON
|
|
68
|
+
measureA.grain1 = measureB.grain1 AND
|
|
69
|
+
measureA.grain2 = measureB.grain2
|
|
70
|
+
"""
|
|
71
|
+
measures_tables = {
|
|
72
|
+
mat.output_table_name: mat.table_ast() for mat in measures_materializations
|
|
73
|
+
}
|
|
74
|
+
initial_mat = measures_materializations[0]
|
|
75
|
+
|
|
76
|
+
# Coalesce grain fields
|
|
77
|
+
grain_fields = [
|
|
78
|
+
ast.Function(
|
|
79
|
+
name=ast.Name("COALESCE"),
|
|
80
|
+
args=[
|
|
81
|
+
ast.Column(
|
|
82
|
+
name=ast.Name(grain),
|
|
83
|
+
_table=measures_tables.get(mat.output_table_name),
|
|
84
|
+
)
|
|
85
|
+
for mat in measures_materializations
|
|
86
|
+
],
|
|
87
|
+
).set_alias(alias=ast.Name(grain))
|
|
88
|
+
for grain in query_grain
|
|
89
|
+
]
|
|
90
|
+
measures_fields = [
|
|
91
|
+
ast.Column(
|
|
92
|
+
name=ast.Name(measure.name),
|
|
93
|
+
_table=measures_tables.get(mat.output_table_name),
|
|
94
|
+
semantic_type=SemanticType.MEASURE,
|
|
95
|
+
)
|
|
96
|
+
for mat in measures_materializations
|
|
97
|
+
for measure in mat.measures
|
|
98
|
+
]
|
|
99
|
+
from_relation = ast.Relation(
|
|
100
|
+
primary=measures_tables.get(initial_mat.output_table_name), # type: ignore
|
|
101
|
+
extensions=[
|
|
102
|
+
ast.Join(
|
|
103
|
+
join_type="FULL OUTER",
|
|
104
|
+
right=ast.Table(name=ast.Name(measures_tables[mat.output_table_name])),
|
|
105
|
+
criteria=ast.JoinCriteria(
|
|
106
|
+
on=_combine_measures_join_criteria(
|
|
107
|
+
measures_tables[initial_mat.output_table_name],
|
|
108
|
+
measures_tables[mat.output_table_name],
|
|
109
|
+
query_grain,
|
|
110
|
+
),
|
|
111
|
+
),
|
|
112
|
+
)
|
|
113
|
+
for mat in measures_materializations[1:]
|
|
114
|
+
],
|
|
115
|
+
)
|
|
116
|
+
return ast.Query(
|
|
117
|
+
select=ast.Select(
|
|
118
|
+
projection=grain_fields + measures_fields, # type: ignore
|
|
119
|
+
from_=ast.From(relations=[from_relation]),
|
|
120
|
+
),
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def _combine_measures_join_criteria(left_table, right_table, query_grain):
|
|
125
|
+
"""
|
|
126
|
+
Generate the join condition across tables for shared grains.
|
|
127
|
+
"""
|
|
128
|
+
return ast.BinaryOp.And(
|
|
129
|
+
*[
|
|
130
|
+
ast.BinaryOp.Eq(
|
|
131
|
+
ast.Column(name=ast.Name(grain), _table=left_table),
|
|
132
|
+
ast.Column(name=ast.Name(grain), _table=right_table),
|
|
133
|
+
)
|
|
134
|
+
for grain in query_grain
|
|
135
|
+
]
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
async def build_cube_materialization( # pylint: disable=used-before-assignment,too-many-locals
|
|
140
|
+
session: AsyncSession,
|
|
141
|
+
current_revision: NodeRevision,
|
|
142
|
+
upsert_input: UpsertCubeMaterialization,
|
|
143
|
+
) -> DruidCubeConfig:
|
|
144
|
+
"""
|
|
145
|
+
Build the full config needed for a Druid cube materialization
|
|
146
|
+
"""
|
|
147
|
+
temporal_partitions = current_revision.temporal_partition_columns()
|
|
148
|
+
temporal_partition = temporal_partitions[0]
|
|
149
|
+
measures_queries = await get_measures_query(
|
|
150
|
+
session=session,
|
|
151
|
+
metrics=current_revision.cube_node_metrics,
|
|
152
|
+
dimensions=current_revision.cube_node_dimensions,
|
|
153
|
+
filters=[
|
|
154
|
+
generate_partition_filter_sql(
|
|
155
|
+
temporal_partition,
|
|
156
|
+
upsert_input.lookback_window, # type: ignore
|
|
157
|
+
),
|
|
158
|
+
],
|
|
159
|
+
include_all_columns=False,
|
|
160
|
+
use_materialized=True,
|
|
161
|
+
preagg_requested=True,
|
|
162
|
+
)
|
|
163
|
+
query_grains = {
|
|
164
|
+
k: [q.node.name for q in queries]
|
|
165
|
+
for k, queries in itertools.groupby(
|
|
166
|
+
measures_queries,
|
|
167
|
+
lambda query: tuple(query.grain), # type: ignore
|
|
168
|
+
)
|
|
169
|
+
}
|
|
170
|
+
if len(query_grains) > 1:
|
|
171
|
+
raise DJInvalidInputException( # pragma: no cover
|
|
172
|
+
"DJ cannot manage materializations for cubes that have underlying "
|
|
173
|
+
"measures queries at different grains: "
|
|
174
|
+
+ " vs ".join(
|
|
175
|
+
f"{', '.join(query_nodes)} at [{', '.join(grain)}]"
|
|
176
|
+
for grain, query_nodes in query_grains.items()
|
|
177
|
+
),
|
|
178
|
+
)
|
|
179
|
+
measures_materializations = [
|
|
180
|
+
MeasuresMaterialization.from_measures_query(measures_query, temporal_partition)
|
|
181
|
+
for measures_query in measures_queries
|
|
182
|
+
]
|
|
183
|
+
|
|
184
|
+
# Combine the queries on the shared query grain
|
|
185
|
+
query_grain = next(iter(query_grains))
|
|
186
|
+
if len(measures_materializations) == 1:
|
|
187
|
+
measures_materialization = measures_materializations[0]
|
|
188
|
+
combiners = [
|
|
189
|
+
CombineMaterialization(
|
|
190
|
+
node=measures_materialization.node,
|
|
191
|
+
output_table_name=measures_materialization.output_table_name,
|
|
192
|
+
columns=measures_materialization.columns,
|
|
193
|
+
grain=measures_materialization.grain,
|
|
194
|
+
measures=measures_materialization.measures,
|
|
195
|
+
dimensions=measures_materialization.dimensions,
|
|
196
|
+
timestamp_column=measures_materialization.timestamp_column,
|
|
197
|
+
timestamp_format=measures_materialization.timestamp_format,
|
|
198
|
+
granularity=measures_materialization.granularity,
|
|
199
|
+
upstream_tables=[measures_materialization.output_table_name],
|
|
200
|
+
),
|
|
201
|
+
]
|
|
202
|
+
if len(measures_materializations) > 1:
|
|
203
|
+
measures_materialization = measures_materializations[0]
|
|
204
|
+
combiner_query = combine_measures_on_shared_grain(
|
|
205
|
+
measures_materializations,
|
|
206
|
+
query_grain, # type: ignore
|
|
207
|
+
)
|
|
208
|
+
columns_metadata_lookup = {
|
|
209
|
+
col.name: col
|
|
210
|
+
for mat in measures_materializations
|
|
211
|
+
for col in mat.columns
|
|
212
|
+
if col.name in combiner_query.select.column_mapping
|
|
213
|
+
}
|
|
214
|
+
measures_lookup = {
|
|
215
|
+
measure.name: measure
|
|
216
|
+
for mat in measures_materializations
|
|
217
|
+
for measure in mat.measures
|
|
218
|
+
}
|
|
219
|
+
combiners = [
|
|
220
|
+
CombineMaterialization(
|
|
221
|
+
node=current_revision,
|
|
222
|
+
query=str(combiner_query),
|
|
223
|
+
columns=[
|
|
224
|
+
columns_metadata_lookup.get(col.alias_or_name.name) # type: ignore
|
|
225
|
+
for col in combiner_query.select.projection
|
|
226
|
+
],
|
|
227
|
+
grain=query_grain,
|
|
228
|
+
measures=[
|
|
229
|
+
measures_lookup.get(col.alias_or_name.name) # type: ignore
|
|
230
|
+
for col in combiner_query.select.projection
|
|
231
|
+
if col.semantic_type == SemanticType.MEASURE # type: ignore
|
|
232
|
+
],
|
|
233
|
+
dimensions=query_grain,
|
|
234
|
+
timestamp_column=measures_materialization.timestamp_column,
|
|
235
|
+
timestamp_format=measures_materialization.timestamp_format,
|
|
236
|
+
granularity=measures_materialization.granularity,
|
|
237
|
+
),
|
|
238
|
+
]
|
|
239
|
+
|
|
240
|
+
metrics_mapping = {
|
|
241
|
+
metric: (measures_query.node, measures)
|
|
242
|
+
for measures_query in measures_queries
|
|
243
|
+
for metric, measures in measures_query.metrics.items() # type: ignore
|
|
244
|
+
}
|
|
245
|
+
config = DruidCubeConfig(
|
|
246
|
+
cube=NodeNameVersion(
|
|
247
|
+
name=current_revision.name,
|
|
248
|
+
version=current_revision.version,
|
|
249
|
+
),
|
|
250
|
+
metrics=[
|
|
251
|
+
CubeMetric(
|
|
252
|
+
metric=NodeNameVersion(
|
|
253
|
+
name=metric.name,
|
|
254
|
+
version=metric.current_version,
|
|
255
|
+
),
|
|
256
|
+
required_measures=[
|
|
257
|
+
MeasureKey(
|
|
258
|
+
node=metrics_mapping.get(metric.name)[0], # type: ignore
|
|
259
|
+
measure_name=measure.name,
|
|
260
|
+
)
|
|
261
|
+
for measure in metrics_mapping.get(metric.name)[1][0] # type: ignore
|
|
262
|
+
],
|
|
263
|
+
derived_expression=metrics_mapping.get(metric.name)[1][1], # type: ignore
|
|
264
|
+
)
|
|
265
|
+
for metric in current_revision.cube_metrics()
|
|
266
|
+
],
|
|
267
|
+
dimensions=current_revision.cube_node_dimensions,
|
|
268
|
+
measures_materializations=measures_materializations,
|
|
269
|
+
combiners=combiners, # pylint: disable=possibly-used-before-assignment
|
|
270
|
+
)
|
|
271
|
+
return config
|