From 1e6d0f92f5ad7e9173d248ab9eaa0271261bf8ed Mon Sep 17 00:00:00 2001 From: Mike Gouline <1960272+gouline@users.noreply.github.com> Date: Thu, 20 Jun 2024 16:40:52 +1000 Subject: [PATCH] API response recorder for test fixtures (#261) * API response recorder for test fixtures * Tracked H2 app database with idempotent setup * New reference exposures and resulting fixtures and test fixes * Clean up tests and remove stale fixtures --- Makefile | 1 + dbtmetabase/_exposures.py | 14 +- requirements-test.txt | 1 + sandbox/.gitignore | 1 + sandbox/docker-compose.yml | 5 +- sandbox/entrypoint.py | 260 +- sandbox/metabase/metabase.db.mv.db | Bin 0 -> 249856 bytes tests/_mocks.py | 65 +- tests/fixtures/api/card.json | 3463 ----------------- tests/fixtures/api/card/1.json | 175 - tests/fixtures/api/card/10.json | 186 - tests/fixtures/api/card/11.json | 186 - tests/fixtures/api/card/12.json | 145 - tests/fixtures/api/card/13.json | 145 - tests/fixtures/api/card/14.json | 145 - tests/fixtures/api/card/15.json | 145 - tests/fixtures/api/card/16.json | 145 - tests/fixtures/api/card/17.json | 145 - tests/fixtures/api/card/2.json | 90 - tests/fixtures/api/card/{23.json => 27.json} | 316 +- tests/fixtures/api/card/{24.json => 28.json} | 248 +- tests/fixtures/api/card/29.json | 104 + tests/fixtures/api/card/3.json | 90 - tests/fixtures/api/card/30.json | 106 + tests/fixtures/api/card/31.json | 106 + tests/fixtures/api/card/32.json | 342 ++ tests/fixtures/api/card/4.json | 111 - tests/fixtures/api/card/5.json | 111 - tests/fixtures/api/card/6.json | 155 - tests/fixtures/api/card/7.json | 155 - tests/fixtures/api/card/8.json | 186 - tests/fixtures/api/card/9.json | 186 - tests/fixtures/api/collection.json | 44 +- tests/fixtures/api/collection/1.json | 23 - tests/fixtures/api/collection/2.json | 23 - tests/fixtures/api/collection/2/items.json | 9 - tests/fixtures/api/collection/3.json | 28 - tests/fixtures/api/collection/3/items.json | 273 -- tests/fixtures/api/collection/root/items.json | 155 +- tests/fixtures/api/dashboard.json | 54 - tests/fixtures/api/dashboard/1.json | 2533 ------------ tests/fixtures/api/dashboard/2.json | 1396 +++++++ tests/fixtures/api/database.json | 71 +- tests/fixtures/api/database/2.json | 64 - tests/fixtures/api/database/2/metadata.json | 1271 ++++-- tests/fixtures/api/field/37.json | 111 - tests/fixtures/api/field/38.json | 112 - tests/fixtures/api/field/39.json | 108 - tests/fixtures/api/field/40.json | 112 - tests/fixtures/api/field/41.json | 112 - tests/fixtures/api/field/42.json | 108 - tests/fixtures/api/field/43.json | 111 - tests/fixtures/api/field/44.json | 112 - tests/fixtures/api/field/45.json | 112 - tests/fixtures/api/field/46.json | 108 - tests/fixtures/api/field/47.json | 112 - tests/fixtures/api/field/48.json | 112 - tests/fixtures/api/field/49.json | 112 - tests/fixtures/api/field/50.json | 111 - tests/fixtures/api/field/51.json | 112 - tests/fixtures/api/field/52.json | 112 - tests/fixtures/api/field/53.json | 111 - tests/fixtures/api/field/54.json | 111 - tests/fixtures/api/field/55.json | 104 - tests/fixtures/api/field/56.json | 108 - tests/fixtures/api/field/57.json | 97 - tests/fixtures/api/field/58.json | 111 - tests/fixtures/api/field/59.json | 112 - tests/fixtures/api/field/60.json | 112 - tests/fixtures/api/field/61.json | 111 - tests/fixtures/api/field/62.json | 97 - tests/fixtures/api/field/63.json | 112 - tests/fixtures/api/field/65.json | 112 - tests/fixtures/api/field/68.json | 112 - tests/fixtures/api/field/69.json | 111 - tests/fixtures/api/field/72.json | 111 - tests/fixtures/api/field/74.json | 112 - tests/fixtures/api/metric.json | 1 - tests/fixtures/api/table.json | 674 +++- tests/fixtures/api/table/10.json | 67 - tests/fixtures/api/table/11.json | 67 - tests/fixtures/api/table/12.json | 67 - tests/fixtures/api/table/5.json | 67 - tests/fixtures/api/table/6.json | 67 - tests/fixtures/api/table/7.json | 67 - tests/fixtures/api/table/8.json | 67 - tests/fixtures/api/table/9.json | 67 - tests/fixtures/api/user.json | 24 - tests/fixtures/api/user/1.json | 27 +- .../a_look_at_your_customers_table.yml | 370 -- .../exposure/collection/our_analytics.yml | 138 +- tests/fixtures/exposure/default/exposures.yml | 434 +-- tests/fixtures/exposure/type/card/1.yml | 26 - tests/fixtures/exposure/type/card/10.yml | 25 - tests/fixtures/exposure/type/card/11.yml | 25 - tests/fixtures/exposure/type/card/12.yml | 25 - tests/fixtures/exposure/type/card/13.yml | 25 - tests/fixtures/exposure/type/card/14.yml | 25 - tests/fixtures/exposure/type/card/15.yml | 25 - tests/fixtures/exposure/type/card/16.yml | 25 - tests/fixtures/exposure/type/card/17.yml | 25 - tests/fixtures/exposure/type/card/2.yml | 25 - tests/fixtures/exposure/type/card/27.yml | 26 + .../exposure/type/card/{24.yml => 28.yml} | 11 +- tests/fixtures/exposure/type/card/29.yml | 17 + tests/fixtures/exposure/type/card/3.yml | 25 - tests/fixtures/exposure/type/card/30.yml | 34 + tests/fixtures/exposure/type/card/31.yml | 34 + tests/fixtures/exposure/type/card/32.yml | 16 + tests/fixtures/exposure/type/card/4.yml | 25 - tests/fixtures/exposure/type/card/5.yml | 25 - tests/fixtures/exposure/type/card/6.yml | 25 - tests/fixtures/exposure/type/card/7.yml | 25 - tests/fixtures/exposure/type/card/8.yml | 25 - tests/fixtures/exposure/type/card/9.yml | 25 - tests/fixtures/exposure/type/dashboard/1.yml | 25 - tests/fixtures/exposure/type/dashboard/2.yml | 28 + tests/test_exposures.py | 26 +- tests/test_metabase.py | 12 +- tests/test_models.py | 15 +- 120 files changed, 4620 insertions(+), 15252 deletions(-) create mode 100644 sandbox/.gitignore create mode 100644 sandbox/metabase/metabase.db.mv.db delete mode 100644 tests/fixtures/api/card.json delete mode 100644 tests/fixtures/api/card/1.json delete mode 100644 tests/fixtures/api/card/10.json delete mode 100644 tests/fixtures/api/card/11.json delete mode 100644 tests/fixtures/api/card/12.json delete mode 100644 tests/fixtures/api/card/13.json delete mode 100644 tests/fixtures/api/card/14.json delete mode 100644 tests/fixtures/api/card/15.json delete mode 100644 tests/fixtures/api/card/16.json delete mode 100644 tests/fixtures/api/card/17.json delete mode 100644 tests/fixtures/api/card/2.json rename tests/fixtures/api/card/{23.json => 27.json} (70%) rename tests/fixtures/api/card/{24.json => 28.json} (70%) create mode 100644 tests/fixtures/api/card/29.json delete mode 100644 tests/fixtures/api/card/3.json create mode 100644 tests/fixtures/api/card/30.json create mode 100644 tests/fixtures/api/card/31.json create mode 100644 tests/fixtures/api/card/32.json delete mode 100644 tests/fixtures/api/card/4.json delete mode 100644 tests/fixtures/api/card/5.json delete mode 100644 tests/fixtures/api/card/6.json delete mode 100644 tests/fixtures/api/card/7.json delete mode 100644 tests/fixtures/api/card/8.json delete mode 100644 tests/fixtures/api/card/9.json delete mode 100644 tests/fixtures/api/collection/1.json delete mode 100644 tests/fixtures/api/collection/2.json delete mode 100644 tests/fixtures/api/collection/2/items.json delete mode 100644 tests/fixtures/api/collection/3.json delete mode 100644 tests/fixtures/api/collection/3/items.json delete mode 100644 tests/fixtures/api/dashboard.json delete mode 100644 tests/fixtures/api/dashboard/1.json create mode 100644 tests/fixtures/api/dashboard/2.json delete mode 100644 tests/fixtures/api/database/2.json delete mode 100644 tests/fixtures/api/field/37.json delete mode 100644 tests/fixtures/api/field/38.json delete mode 100644 tests/fixtures/api/field/39.json delete mode 100644 tests/fixtures/api/field/40.json delete mode 100644 tests/fixtures/api/field/41.json delete mode 100644 tests/fixtures/api/field/42.json delete mode 100644 tests/fixtures/api/field/43.json delete mode 100644 tests/fixtures/api/field/44.json delete mode 100644 tests/fixtures/api/field/45.json delete mode 100644 tests/fixtures/api/field/46.json delete mode 100644 tests/fixtures/api/field/47.json delete mode 100644 tests/fixtures/api/field/48.json delete mode 100644 tests/fixtures/api/field/49.json delete mode 100644 tests/fixtures/api/field/50.json delete mode 100644 tests/fixtures/api/field/51.json delete mode 100644 tests/fixtures/api/field/52.json delete mode 100644 tests/fixtures/api/field/53.json delete mode 100644 tests/fixtures/api/field/54.json delete mode 100644 tests/fixtures/api/field/55.json delete mode 100644 tests/fixtures/api/field/56.json delete mode 100644 tests/fixtures/api/field/57.json delete mode 100644 tests/fixtures/api/field/58.json delete mode 100644 tests/fixtures/api/field/59.json delete mode 100644 tests/fixtures/api/field/60.json delete mode 100644 tests/fixtures/api/field/61.json delete mode 100644 tests/fixtures/api/field/62.json delete mode 100644 tests/fixtures/api/field/63.json delete mode 100644 tests/fixtures/api/field/65.json delete mode 100644 tests/fixtures/api/field/68.json delete mode 100644 tests/fixtures/api/field/69.json delete mode 100644 tests/fixtures/api/field/72.json delete mode 100644 tests/fixtures/api/field/74.json delete mode 100644 tests/fixtures/api/metric.json delete mode 100644 tests/fixtures/api/table/10.json delete mode 100644 tests/fixtures/api/table/11.json delete mode 100644 tests/fixtures/api/table/12.json delete mode 100644 tests/fixtures/api/table/5.json delete mode 100644 tests/fixtures/api/table/6.json delete mode 100644 tests/fixtures/api/table/7.json delete mode 100644 tests/fixtures/api/table/8.json delete mode 100644 tests/fixtures/api/table/9.json delete mode 100644 tests/fixtures/api/user.json delete mode 100644 tests/fixtures/exposure/collection/a_look_at_your_customers_table.yml delete mode 100644 tests/fixtures/exposure/type/card/1.yml delete mode 100644 tests/fixtures/exposure/type/card/10.yml delete mode 100644 tests/fixtures/exposure/type/card/11.yml delete mode 100644 tests/fixtures/exposure/type/card/12.yml delete mode 100644 tests/fixtures/exposure/type/card/13.yml delete mode 100644 tests/fixtures/exposure/type/card/14.yml delete mode 100644 tests/fixtures/exposure/type/card/15.yml delete mode 100644 tests/fixtures/exposure/type/card/16.yml delete mode 100644 tests/fixtures/exposure/type/card/17.yml delete mode 100644 tests/fixtures/exposure/type/card/2.yml create mode 100644 tests/fixtures/exposure/type/card/27.yml rename tests/fixtures/exposure/type/card/{24.yml => 28.yml} (52%) create mode 100644 tests/fixtures/exposure/type/card/29.yml delete mode 100644 tests/fixtures/exposure/type/card/3.yml create mode 100644 tests/fixtures/exposure/type/card/30.yml create mode 100644 tests/fixtures/exposure/type/card/31.yml create mode 100644 tests/fixtures/exposure/type/card/32.yml delete mode 100644 tests/fixtures/exposure/type/card/4.yml delete mode 100644 tests/fixtures/exposure/type/card/5.yml delete mode 100644 tests/fixtures/exposure/type/card/6.yml delete mode 100644 tests/fixtures/exposure/type/card/7.yml delete mode 100644 tests/fixtures/exposure/type/card/8.yml delete mode 100644 tests/fixtures/exposure/type/card/9.yml delete mode 100644 tests/fixtures/exposure/type/dashboard/1.yml create mode 100644 tests/fixtures/exposure/type/dashboard/2.yml diff --git a/Makefile b/Makefile index 8f77876..36197c4 100644 --- a/Makefile +++ b/Makefile @@ -43,6 +43,7 @@ check: check-fmt check-imports check-lint-python check-type .PHONY: check test: + rm -rf tests/tmp python3 -m unittest tests .PHONY: test diff --git a/dbtmetabase/_exposures.py b/dbtmetabase/_exposures.py index 7cf4cb7..4e95927 100644 --- a/dbtmetabase/_exposures.py +++ b/dbtmetabase/_exposures.py @@ -165,8 +165,6 @@ def extract_exposures( count = counts.get(name, 0) counts[name] = count + 1 - _logger.error(ctx.model_refs) - exposures.append( { "id": item["id"], @@ -183,11 +181,13 @@ def extract_exposures( creator_name=creator_name or "", creator_email=creator_email or "", native_query=native_query, - depends_on={ - ctx.model_refs[depend.lower()] - for depend in depends - if depend.lower() in ctx.model_refs - }, + depends_on=sorted( + [ + ctx.model_refs[depend.lower()] + for depend in depends + if depend.lower() in ctx.model_refs + ] + ), ), } ) diff --git a/requirements-test.txt b/requirements-test.txt index d39a600..1f959e9 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -7,5 +7,6 @@ pylint>=3.0.2 mypy>=1.7.1 molot~=1.0.0 dbt-postgres~=1.8.1 +python-dotenv~=1.0.1 types-requests types-PyYAML diff --git a/sandbox/.gitignore b/sandbox/.gitignore new file mode 100644 index 0000000..f008ba5 --- /dev/null +++ b/sandbox/.gitignore @@ -0,0 +1 @@ +/metabase/metabase.db.trace.db diff --git a/sandbox/docker-compose.yml b/sandbox/docker-compose.yml index b023427..02b7fe8 100644 --- a/sandbox/docker-compose.yml +++ b/sandbox/docker-compose.yml @@ -24,13 +24,16 @@ services: build: dockerfile: Dockerfile-metabase args: - - MB_VERSION=0.50.3 + - MB_VERSION=0.50.5 environment: - MB_SETUP_TOKEN=${MB_SETUP_TOKEN:-} + - MB_DB_FILE=/metabase-data/metabase.db ports: - ${MB_PORT}:3000 networks: - common + volumes: + - ./metabase:/metabase-data healthcheck: test: ["CMD-SHELL", "curl --fail http://localhost:3000/api/health"] interval: 10s diff --git a/sandbox/entrypoint.py b/sandbox/entrypoint.py index 4ff27b1..46870eb 100755 --- a/sandbox/entrypoint.py +++ b/sandbox/entrypoint.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -import time +import logging import requests from molot import envarg, envarg_int, evaluate, shell, target @@ -16,10 +16,12 @@ MB_PASSWORD = envarg("MB_PASSWORD") MB_NAME = envarg("MB_NAME", "dbtmetabase") +MB_API_URL = f"http://{MB_HOST}:{MB_PORT}/api" + @target( description="initial setup", - depends=["metabase_setup", "dbt_run", "metabase_content"], + depends=["dbt_run", "metabase_setup"], ) def init(): pass @@ -31,20 +33,10 @@ def dbt_run(): shell("dbt run --profiles-dir .") -def _session_headers(): - session_id = requests.post( - url=f"http://{MB_HOST}:{MB_PORT}/api/session", - json={"username": MB_USER, "password": MB_PASSWORD}, - timeout=10, - ).json()["id"] - - return {"X-Metabase-Session": session_id} - - @target(description="set up Metabase user and database") def metabase_setup(): - requests.post( - url=f"http://{MB_HOST}:{MB_PORT}/api/setup", + setup_resp = requests.post( + url=f"{MB_API_URL}/setup", json={ "token": MB_SETUP_TOKEN, "user": { @@ -55,28 +47,6 @@ def metabase_setup(): "password_confirm": MB_PASSWORD, "password": MB_PASSWORD, }, - "database": { - "engine": "postgres", - "name": POSTGRES_DB, - "details": { - "host": POSTGRES_HOST, - "port": POSTGRES_PORT, - "dbname": POSTGRES_DB, - "user": POSTGRES_USER, - "password": POSTGRES_PASSWORD, - "schema-filters-type": "all", - "ssl": False, - "tunnel-enabled": False, - "advanced-options": False, - }, - "is_on_demand": False, - "is_full_sync": True, - "is_sample": False, - "cache_ttl": None, - "refingerprint": False, - "auto_run_queries": True, - "schedules": {}, - }, "prefs": { "site_name": MB_NAME, "site_locale": "en", @@ -84,160 +54,104 @@ def metabase_setup(): }, }, timeout=10, - ).raise_for_status() + ) + if setup_resp.status_code == 200: + logging.info("Metabase setup successful") + elif setup_resp.status_code == 403: + logging.info("Metabase already set up") + else: + raise requests.HTTPError(f"Error: {setup_resp.reason}", response=setup_resp) - requests.post( - url=f"http://{MB_HOST}:{MB_PORT}/api/database", - headers=_session_headers(), - json={ - "engine": "postgres", - "name": POSTGRES_DB, - "details": { - "host": POSTGRES_HOST, - "port": POSTGRES_PORT, - "dbname": POSTGRES_DB, - "user": POSTGRES_USER, - "password": POSTGRES_PASSWORD, - "schema-filters-type": "all", - "ssl": False, - "tunnel-enabled": False, - "advanced-options": False, - }, - "is_on_demand": False, - "is_full_sync": True, - "is_sample": False, - "cache_ttl": None, - "refingerprint": False, - "auto_run_queries": True, - "schedules": {}, - }, + session_id = requests.post( + url=f"{MB_API_URL}/session", + json={"username": MB_USER, "password": MB_PASSWORD}, timeout=10, - ).raise_for_status() - + ).json()["id"] -@target(description="add mock content to Metabase") -def metabase_content(): - headers = _session_headers() + headers = {"X-Metabase-Session": session_id} database_id = "" + sample_database_id = "" databases = requests.get( - url=f"http://{MB_HOST}:{MB_PORT}/api/database", + url=f"{MB_API_URL}/database", headers=headers, - json={}, timeout=10, ).json()["data"] for db in databases: - if db["name"] == POSTGRES_DB: + if db["name"] == POSTGRES_DB and db["engine"] == "postgres": database_id = db["id"] - break - - requests.post( - url=f"http://{MB_HOST}:{MB_PORT}/api/database/{database_id}/sync_schema", - headers=headers, - json={}, - timeout=10, - ) - - time.sleep(5) - - tables_fields = requests.get( - url=f"http://{MB_HOST}:{MB_PORT}/api/database/{database_id}?include=tables.fields", + elif db["name"] == "Sample Database" and db["engine"] == "h2": + sample_database_id = db["id"] + + if sample_database_id: + logging.info("Archiving Metabase sample database %s", sample_database_id) + requests.delete( + url=f"{MB_API_URL}/database/{sample_database_id}", + headers=headers, + timeout=10, + ).raise_for_status() + + collections = requests.get( + url=f"{MB_API_URL}/collection", headers=headers, timeout=10, ).json() - - customers_table_id = "" - first_order_field_id = "" - for table in tables_fields["tables"]: - if table["name"] == "customers": - customers_table_id = table["id"] - for field in table["fields"]: - if field["name"] == "first_order": - first_order_field_id = field["id"] - break - + for collection in collections: + if collection.get("is_sample") == True and collection.get("archived") == False: + logging.info("Deleting Metabase sample collection %s", collection["id"]) + requests.put( + url=f"{MB_API_URL}/collection/{collection['id']}", + headers=headers, + json={"archived": True}, + timeout=10, + ).raise_for_status() + + database_body = { + "engine": "postgres", + "name": POSTGRES_DB, + "details": { + "host": POSTGRES_HOST, + "port": POSTGRES_PORT, + "dbname": POSTGRES_DB, + "user": POSTGRES_USER, + "password": POSTGRES_PASSWORD, + "schema-filters-type": "all", + "ssl": False, + "tunnel-enabled": False, + "advanced-options": False, + }, + "is_on_demand": False, + "is_full_sync": True, + "is_sample": False, + "cache_ttl": None, + "refingerprint": False, + "auto_run_queries": True, + "schedules": {}, + } + if not database_id: + logging.info("Creating Metabase database") + database_id = requests.post( + url=f"{MB_API_URL}/database", + headers=headers, + json=database_body, + timeout=10, + ).json()["id"] + else: + logging.info("Updating Metabase database %s", database_id) + requests.put( + url=f"{MB_API_URL}/database/{database_id}", + headers=headers, + json=database_body, + timeout=10, + ).raise_for_status() + + logging.info("Triggering Metabase database sync") requests.post( - url=f"http://{MB_HOST}:{MB_PORT}/api/card", + url=f"{MB_API_URL}/database/{database_id}/sync_schema", headers=headers, - json={ - "name": "Customers", - "dataset_query": { - "database": database_id, - "type": "query", - "query": { - "source-table": customers_table_id, - "aggregation": [["count"]], - "breakout": [ - [ - "field", - first_order_field_id, - {"base-type": "type/Date", "temporal-unit": "month"}, - ] - ], - }, - }, - "display": "line", - "description": "Customers test", - "visualization_settings": { - "graph.dimensions": ["first_order"], - "graph.metrics": ["count"], - }, - "collection_id": None, - "collection_position": None, - "result_metadata": [ - { - "description": None, - "semantic_type": None, - "coercion_strategy": None, - "unit": "month", - "name": "first_order", - "settings": None, - "fk_target_field_id": None, - "field_ref": [ - "field", - first_order_field_id, - {"base-type": "type/Date", "temporal-unit": "month"}, - ], - "effective_type": "type/DateTimeWithLocalTZ", - "id": first_order_field_id, - "visibility_type": "normal", - "display_name": "First Order", - "fingerprint": { - "global": {"distinct-count": 47, "nil%": 0.38}, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07", - } - }, - }, - "base_type": "type/DateTimeWithLocalTZ", - }, - { - "display_name": "Count", - "semantic_type": "type/Quantity", - "field_ref": ["aggregation", 0], - "name": "count", - "base_type": "type/BigInteger", - "effective_type": "type/BigInteger", - "fingerprint": { - "global": {"distinct-count": 4, "nil%": 0}, - "type": { - "type/Number": { - "min": 2, - "q1": 11.298221281347036, - "q3": 27.5, - "max": 38, - "sd": 12.96148139681572, - "avg": 20, - } - }, - }, - }, - ], - }, + json={}, timeout=10, - ) + ).raise_for_status() evaluate() diff --git a/sandbox/metabase/metabase.db.mv.db b/sandbox/metabase/metabase.db.mv.db new file mode 100644 index 0000000000000000000000000000000000000000..9f6850fb1f0f8142ae57923242dbd2c3a5499840 GIT binary patch literal 249856 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ΝqL4^xu)E|GXrT(5QV`J1N>38 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
T-z5Kpx)AHN*9tY4g1& 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�_M=;2HzPA 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%0AWSHvd=49o+M6jCRWBg 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 H*Ym#treZbE literal 0 HcmV?d00001 diff --git a/tests/_mocks.py b/tests/_mocks.py index d0a96e2..49c3181 100644 --- a/tests/_mocks.py +++ b/tests/_mocks.py @@ -1,8 +1,10 @@ import json +import os from pathlib import Path -from typing import Any, Dict, Mapping, Optional, Sequence +from typing import Any, Dict, Mapping, Optional, Sequence, Union import requests +from dotenv import dotenv_values from dbtmetabase.core import DbtMetabase from dbtmetabase.manifest import Manifest, Model @@ -11,14 +13,28 @@ FIXTURES_PATH = Path("tests") / "fixtures" TMP_PATH = Path("tests") / "tmp" +RECORD = os.getenv("RECORD", "").lower() == "true" +SANDBOX_ENV = dotenv_values(Path().parent / "sandbox" / ".env") + class MockMetabase(Metabase): - def __init__(self, url: str): + def __init__(self, url: str, record: bool = False): + self.record = record + + api_key = "dummy" + username = None + password = None + + if record: + api_key = None + username = SANDBOX_ENV["MB_USER"] + password = SANDBOX_ENV["MB_PASSWORD"] + super().__init__( url=url, - api_key="dummy", - username="None", - password=None, + api_key=api_key, + username=username, + password=password, session_id=None, skip_verify=False, cert=None, @@ -33,18 +49,29 @@ def _api( path: str, params: Optional[Dict[str, Any]] = None, **kwargs, - ) -> Mapping: + ) -> Union[Mapping, Sequence]: path_toks = f"{path.lstrip('/')}.json".split("/") - if path_toks[0] == "api" and method == "get": - json_path = Path.joinpath(FIXTURES_PATH, *path_toks) - if json_path.exists(): - with open(json_path, encoding="utf-8") as f: - return json.load(f) - else: - response = requests.Response() - response.status_code = 404 - raise requests.exceptions.HTTPError(response=response) - return {} + json_path = Path.joinpath(FIXTURES_PATH, *path_toks) + + if self.record: + resp = super()._api(method, path, params, **kwargs) + + if method == "get": + json_path.parent.mkdir(parents=True, exist_ok=True) + with open(json_path, "w", encoding="utf-8") as f: + json.dump(resp, f, indent=4) + + return resp + else: + if method == "get": + if json_path.exists(): + with open(json_path, encoding="utf-8") as f: + return json.load(f) + else: + response = requests.Response() + response.status_code = 404 + raise requests.exceptions.HTTPError(response=response) + return {} class MockManifest(Manifest): @@ -59,8 +86,8 @@ def read_models(self) -> Sequence[Model]: class MockDbtMetabase(DbtMetabase): def __init__( self, - manifest_path: Path = FIXTURES_PATH / "manifest-v2.json", - metabase_url: str = "http://localhost:3000", + manifest_path: Path = FIXTURES_PATH / "manifest-v12.json", + metabase_url: str = f"http://localhost:{SANDBOX_ENV['MB_PORT']}", ): # pylint: disable=super-init-not-called self._manifest = MockManifest(path=manifest_path) - self._metabase = MockMetabase(url=metabase_url) + self._metabase = MockMetabase(url=metabase_url, record=RECORD) diff --git a/tests/fixtures/api/card.json b/tests/fixtures/api/card.json deleted file mode 100644 index d7f4645..0000000 --- a/tests/fixtures/api/card.json +++ /dev/null @@ -1,3463 +0,0 @@ -[ - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "day" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Date" - }, - { - "name": "sum", - "display_name": "Sum of customer_lifetime_value", - "base_type": "type/Decimal", - "semantic_type": null, - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 35, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 15.0, - "q3": 40.10050506338833, - "max": 131.0, - "sd": 26.119172295224672, - "avg": 32.15384615384615 - } - } - } - }, - { - "name": "avg", - "display_name": "Average of customer_lifetime_value", - "base_type": "type/Decimal", - "semantic_type": null, - "field_ref": [ - "aggregation", - 1 - ], - "fingerprint": { - "global": { - "distinct-count": 34, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 13.17157287525381, - "q3": 34.732050807568875, - "max": 99.0, - "sd": 17.628392521514144, - "avg": 26.39102564102564 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customer_lifetime_value over time", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.456526Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "day" - } - ] - ], - "aggregation": [ - [ - "sum", - [ - "field", - 41, - null - ] - ], - [ - "avg", - [ - "field", - 41, - null - ] - ] - ] - } - }, - "id": 9, - "display": "line", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:38.208516Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "sum", - "average" - ], - "graph.metrics": [ - "sum", - "avg" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#f9d45c", - "#F1B556" - ] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "favorite": false, - "created_at": "2021-07-21T08:01:38.189846Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day", - "name": "first_order", - "field_ref": [ - "field", - 39, - { - "temporal-unit": "day" - } - ], - "effective_type": "type/Date", - "id": 39, - "display_name": "first_order", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "base_type": "type/Date" - }, - { - "name": "sum", - "display_name": "Sum of customer_lifetime_value", - "base_type": "type/Decimal", - "semantic_type": null, - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 33, - "nil%": 0.02127659574468085 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 17.0, - "q3": 55.93725393319377, - "max": 129.0, - "sd": 25.492672054973276, - "avg": 36.34782608695652 - } - } - } - }, - { - "name": "avg", - "display_name": "Average of customer_lifetime_value", - "base_type": "type/Decimal", - "semantic_type": null, - "field_ref": [ - "aggregation", - 1 - ], - "fingerprint": { - "global": { - "distinct-count": 35, - "nil%": 0.02127659574468085 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 15.0, - "q3": 33.53589838486224, - "max": 65.0, - "sd": 17.057530000270994, - "avg": 27.342391304347824 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customer_lifetime_value over time", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.665585Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 39, - { - "temporal-unit": "day" - } - ] - ], - "aggregation": [ - [ - "sum", - [ - "field", - 41, - null - ] - ], - [ - "avg", - [ - "field", - 41, - null - ] - ] - ] - } - }, - "id": 11, - "display": "line", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:38.544961Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "sum", - "average" - ], - "graph.metrics": [ - "sum", - "avg" - ], - "graph.dimensions": [ - "first_order" - ], - "graph.colors": [ - "#f9d45c", - "#F1B556" - ] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "favorite": false, - "created_at": "2021-07-21T08:01:38.52841Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 1, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 0.0, - "q3": 0.0, - "max": 0.0, - "sd": null, - "avg": 0.0 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customers added in the last 30 days", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.000946Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "filter": [ - "time-interval", - [ - "field", - 42, - null - ], - -30, - "day" - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 4, - "display": "scalar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:37.545719Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "favorite": false, - "created_at": "2021-07-21T08:01:37.535187Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 1, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 0.0, - "q3": 0.0, - "max": 0.0, - "sd": null, - "avg": 0.0 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customers added in the last 30 days", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.157282Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "filter": [ - "time-interval", - [ - "field", - 39, - null - ], - -30, - "day" - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 5, - "display": "scalar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:37.641827Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "favorite": false, - "created_at": "2021-07-21T08:01:37.630969Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "name": "customer_lifetime_value", - "field_ref": [ - "field", - 41, - { - "binning": { - "strategy": "num-bins", - "min-value": 0.0, - "max-value": 100.0, - "num-bins": 8, - "bin-width": 12.5 - } - } - ], - "effective_type": "type/BigInteger", - "id": 41, - "display_name": "customer_lifetime_value", - "fingerprint": { - "global": { - "distinct-count": 36, - "nil%": 0.38 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 13.464101615137753, - "q3": 35.46410161513776, - "max": 99.0, - "sd": 18.812245525263663, - "avg": 26.967741935483872 - } - } - }, - "base_type": "type/Decimal" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 8, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 3.0, - "q3": 17.5, - "max": 38.0, - "sd": 12.294017127971522, - "avg": 12.5 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customers by customer_lifetime_value", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.20895Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 41, - { - "binning": { - "strategy": "default" - } - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 7, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:37.870294Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "customer_lifetime_value" - ], - "graph.colors": [ - "#A6E7F3" - ] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "favorite": false, - "created_at": "2021-07-21T08:01:37.858387Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": "type/Quantity", - "coercion_strategy": null, - "name": "number_of_orders", - "field_ref": [ - "field", - 40, - { - "binning": { - "strategy": "num-bins", - "min-value": 1.0, - "max-value": 5.0, - "num-bins": 8, - "bin-width": 0.5 - } - } - ], - "effective_type": "type/BigInteger", - "id": 40, - "display_name": "number_of_orders", - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.38 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.0, - "q3": 2.0901356485315583, - "max": 5.0, - "sd": 0.7779687173818424, - "avg": 1.596774193548387 - } - } - }, - "base_type": "type/Decimal" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 4.0, - "q3": 34.25, - "max": 38.0, - "sd": 16.492422502470642, - "avg": 20.0 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customers by number_of_orders", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.107313Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 40, - { - "binning": { - "strategy": "default" - } - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 6, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:37.76733Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "number_of_orders" - ], - "graph.colors": [ - "#EF8C8C" - ] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "favorite": false, - "created_at": "2021-07-21T08:01:37.754606Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "day" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Date" - }, - { - "name": "sum", - "display_name": "Sum of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 7, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.0200644129064447, - "q3": 2.3725029928215275, - "max": 7.0, - "sd": 1.25650644505132, - "avg": 1.9038461538461537 - } - } - } - }, - { - "name": "avg", - "display_name": "Average of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 1 - ], - "fingerprint": { - "global": { - "distinct-count": 8, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.0, - "q3": 2.019031639883796, - "max": 5.0, - "sd": 0.7594097162561813, - "avg": 1.573717948717949 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": null, - "query_type": "query", - "name": "Customers, Sum of Number Of Orders and Average of Number Of Orders, Grouped by Most Recent Order (day)", - "creator_id": 1, - "updated_at": "2021-07-21T19:19:58.848286Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "day" - } - ] - ], - "aggregation": [ - [ - "sum", - [ - "field", - 40, - null - ] - ], - [ - "avg", - [ - "field", - 40, - null - ] - ] - ] - } - }, - "id": 1, - "display": "line", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:00:47.4892Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "sum", - "average" - ], - "graph.metrics": [ - "sum", - "avg" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#7172AD", - "#EF8C8C" - ] - }, - "collection": null, - "favorite": false, - "created_at": "2021-07-21T08:00:47.453351Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day", - "name": "first_order", - "field_ref": [ - "field", - 39, - { - "temporal-unit": "day" - } - ], - "effective_type": "type/Date", - "id": 39, - "display_name": "first_order", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "base_type": "type/Date" - }, - { - "name": "sum", - "display_name": "Sum of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 6, - "nil%": 0.02127659574468085 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.1073874870150486, - "q3": 3.0, - "max": 5.0, - "sd": 1.2643380578934107, - "avg": 2.152173913043478 - } - } - } - }, - { - "name": "avg", - "display_name": "Average of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 1 - ], - "fingerprint": { - "global": { - "distinct-count": 8, - "nil%": 0.02127659574468085 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.019470273980893, - "q3": 1.989426104361334, - "max": 5.0, - "sd": 0.7515349295958083, - "avg": 1.596014492753623 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Number_of_orders over time", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.321381Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 39, - { - "temporal-unit": "day" - } - ] - ], - "aggregation": [ - [ - "sum", - [ - "field", - 40, - null - ] - ], - [ - "avg", - [ - "field", - 40, - null - ] - ] - ] - } - }, - "id": 10, - "display": "line", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:38.368218Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "sum", - "average" - ], - "graph.metrics": [ - "sum", - "avg" - ], - "graph.dimensions": [ - "first_order" - ], - "graph.colors": [ - "#7172AD", - "#EF8C8C" - ] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "favorite": false, - "created_at": "2021-07-21T08:01:38.347535Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "day" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Date" - }, - { - "name": "sum", - "display_name": "Sum of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 7, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.0200644129064447, - "q3": 2.3725029928215275, - "max": 7.0, - "sd": 1.25650644505132, - "avg": 1.9038461538461537 - } - } - } - }, - { - "name": "avg", - "display_name": "Average of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 1 - ], - "fingerprint": { - "global": { - "distinct-count": 8, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.0, - "q3": 2.019031639883796, - "max": 5.0, - "sd": 0.7594097162561813, - "avg": 1.573717948717949 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Number_of_orders over time", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.368004Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "day" - } - ] - ], - "aggregation": [ - [ - "sum", - [ - "field", - 40, - null - ] - ], - [ - "avg", - [ - "field", - 40, - null - ] - ] - ] - } - }, - "id": 8, - "display": "line", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:38.030503Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "sum", - "average" - ], - "graph.metrics": [ - "sum", - "avg" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#7172AD", - "#EF8C8C" - ] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "favorite": false, - "created_at": "2021-07-21T08:01:38.016244Z", - "public_uuid": null - }, - { - "description": "Nice KPI", - "archived": false, - "collection_position": null, - "table_id": 6, - "result_metadata": [ - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 1, - "nil%": 0 - }, - "type": { - "type/Number": { - "min": 99, - "q1": 99, - "q3": 99, - "max": 99, - "sd": null, - "avg": 99 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": null, - "query_type": "query", - "name": "Orders, Count", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:14.290572Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 6, - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 2, - "display": "scalar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:14.3056Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "Number of orders" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [] - }, - "collection": null, - "favorite": false, - "created_at": "2021-07-21T08:01:14.290572Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day-of-week", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "day-of-week" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 6.0, - "q1": 7.414213562373095, - "q3": 15.782357300628025, - "max": 38.0, - "sd": 10.488088481701515, - "avg": 12.5 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by day of the week", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.346492Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "day-of-week" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 12, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:38.676704Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#A6E7F3" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "favorite": false, - "created_at": "2021-07-21T08:01:38.662485Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day-of-week", - "name": "first_order", - "field_ref": [ - "field", - 39, - { - "temporal-unit": "day-of-week" - } - ], - "effective_type": "type/Date", - "id": 39, - "display_name": "first_order", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 6, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 6.0, - "q1": 7.414213562373095, - "q3": 11.757359312880714, - "max": 38.0, - "sd": 10.528871870107588, - "avg": 12.5 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by day of the week", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.483723Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 39, - { - "temporal-unit": "day-of-week" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 13, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:38.821564Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "first_order" - ], - "graph.colors": [ - "#F1B556" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "favorite": false, - "created_at": "2021-07-21T08:01:38.808186Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "month-of-year", - "name": "first_order", - "field_ref": [ - "field", - 39, - { - "temporal-unit": "month-of-year" - } - ], - "effective_type": "type/Date", - "id": 39, - "display_name": "first_order", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 4, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 2.0, - "q1": 11.298221281347036, - "q3": 27.5, - "max": 38.0, - "sd": 12.96148139681572, - "avg": 20.0 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by month of the year", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.52292Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 39, - { - "temporal-unit": "month-of-year" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 15, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:39.098141Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "first_order" - ], - "graph.colors": [ - "#F1B556" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "favorite": false, - "created_at": "2021-07-21T08:01:39.084258Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "month-of-year", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "month-of-year" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 8.0, - "q1": 10.25, - "q3": 30.5, - "max": 38.0, - "sd": 12.62933094031509, - "avg": 20.0 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by month of the year", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.562877Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "month-of-year" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 14, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:38.953633Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#A6E7F3" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "favorite": false, - "created_at": "2021-07-21T08:01:38.938688Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "quarter-of-year", - "name": "first_order", - "field_ref": [ - "field", - 39, - { - "temporal-unit": "quarter-of-year" - } - ], - "effective_type": "type/Date", - "id": 39, - "display_name": "first_order", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 3, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 2.0, - "q1": 11.0, - "q3": 54.5, - "max": 60.0, - "sd": 29.280255007997, - "avg": 33.333333333333336 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by quarter of the year", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.603496Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 39, - { - "temporal-unit": "quarter-of-year" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 17, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:39.385031Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "first_order" - ], - "graph.colors": [ - "#F1B556" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "favorite": false, - "created_at": "2021-07-21T08:01:39.371067Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "quarter-of-year", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "quarter-of-year" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 3, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 8.0, - "q1": 15.5, - "q3": 50.0, - "max": 54.0, - "sd": 23.35237318418266, - "avg": 33.333333333333336 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by quarter of the year", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.567707Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "quarter-of-year" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 16, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:39.243522Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#A6E7F3" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "favorite": false, - "created_at": "2021-07-21T08:01:39.228965Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 1, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 100.0, - "q1": 100.0, - "q3": 100.0, - "max": 100.0, - "sd": null, - "avg": 100.0 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Total customers", - "creator_id": 1, - "updated_at": "2021-07-21T08:01:41.996Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 3, - "display": "scalar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:37.449936Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "favorite": false, - "created_at": "2021-07-21T08:01:37.434243Z", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 10, - "result_metadata": [ - { - "description": "This is a unique identifier for an order", - "semantic_type": null, - "coercion_strategy": null, - "name": "order_id", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 47, - null - ], - "effective_type": "type/Integer", - "id": 47, - "visibility_type": "normal", - "display_name": "Order ID", - "fingerprint": { - "global": { - "distinct-count": 99, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 25.25, - "q3": 74.75, - "max": 99.0, - "sd": 28.719704534890823, - "avg": 50.0 - } - } - }, - "base_type": "type/Integer" - }, - { - "description": "Foreign key to the customers table", - "semantic_type": "type/FK", - "coercion_strategy": null, - "name": "customer_id", - "settings": null, - "fk_target_field_id": 87, - "field_ref": [ - "field", - 84, - null - ], - "effective_type": "type/Integer", - "id": 84, - "visibility_type": "normal", - "display_name": "Customer ID", - "fingerprint": { - "global": { - "distinct-count": 62, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 25.875, - "q3": 69.625, - "max": 99.0, - "sd": 27.781341350472964, - "avg": 48.25252525252525 - } - } - }, - "base_type": "type/Integer" - }, - { - "description": "Date (UTC) that the order was placed", - "semantic_type": null, - "coercion_strategy": null, - "unit": "default", - "name": "order_date", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 82, - { - "temporal-unit": "default" - } - ], - "effective_type": "type/Date", - "id": 82, - "visibility_type": "normal", - "display_name": "Order Date", - "fingerprint": { - "global": { - "distinct-count": 69, - "nil%": 0.0 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Date" - }, - { - "description": null, - "semantic_type": "type/Category", - "coercion_strategy": null, - "name": "status", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 78, - null - ], - "effective_type": "type/Text", - "id": 78, - "visibility_type": "normal", - "display_name": "Status", - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.0 - }, - "type": { - "type/Text": { - "percent-json": 0.0, - "percent-url": 0.0, - "percent-email": 0.0, - "percent-state": 0.0, - "average-length": 8.404040404040405 - } - } - }, - "base_type": "type/Text" - }, - { - "description": "Amount of the order (AUD) paid for by credit card", - "semantic_type": "type/Category", - "coercion_strategy": null, - "name": "credit_card_amount", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 76, - null - ], - "effective_type": "type/BigInteger", - "id": 76, - "visibility_type": "normal", - "display_name": "Credit Card Amount", - "fingerprint": { - "global": { - "distinct-count": 25, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 0.0, - "q3": 18.797054997187544, - "max": 30.0, - "sd": 10.959088854927673, - "avg": 8.797979797979798 - } - } - }, - "base_type": "type/BigInteger" - }, - { - "description": "Amount of the order (AUD) paid for by coupon", - "semantic_type": "type/Category", - "coercion_strategy": null, - "name": "coupon_amount", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 83, - null - ], - "effective_type": "type/BigInteger", - "id": 83, - "visibility_type": "normal", - "display_name": "Coupon Amount", - "fingerprint": { - "global": { - "distinct-count": 12, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 0.0, - "q3": 0.4747603274810728, - "max": 26.0, - "sd": 5.955012405351229, - "avg": 1.8686868686868687 - } - } - }, - "base_type": "type/BigInteger" - }, - { - "description": "Amount of the order (AUD) paid for by bank transfer", - "semantic_type": "type/Category", - "coercion_strategy": null, - "name": "bank_transfer_amount", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 81, - null - ], - "effective_type": "type/BigInteger", - "id": 81, - "visibility_type": "normal", - "display_name": "Bank Transfer Amount", - "fingerprint": { - "global": { - "distinct-count": 19, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 0.0, - "q3": 4.75, - "max": 26.0, - "sd": 7.420825132023675, - "avg": 4.151515151515151 - } - } - }, - "base_type": "type/BigInteger" - }, - { - "description": "Amount of the order (AUD) paid for by gift card", - "semantic_type": "type/Category", - "coercion_strategy": null, - "name": "gift_card_amount", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 77, - null - ], - "effective_type": "type/BigInteger", - "id": 77, - "visibility_type": "normal", - "display_name": "Gift Card Amount", - "fingerprint": { - "global": { - "distinct-count": 11, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 0.0, - "q3": 1.3692088763283736, - "max": 30.0, - "sd": 6.392362351566517, - "avg": 2.0707070707070705 - } - } - }, - "base_type": "type/BigInteger" - }, - { - "description": "Total amount (AUD) of the order", - "semantic_type": null, - "coercion_strategy": null, - "name": "amount", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 80, - null - ], - "effective_type": "type/BigInteger", - "id": 80, - "visibility_type": "normal", - "display_name": "Amount", - "fingerprint": { - "global": { - "distinct-count": 32, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 8.202945002812456, - "q3": 24.26138721247417, - "max": 58.0, - "sd": 10.736062525374601, - "avg": 16.88888888888889 - } - } - }, - "base_type": "type/BigInteger" - }, - { - "description": null, - "semantic_type": null, - "coercion_strategy": null, - "name": "customer_id_2", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 93, - { - "join-alias": "Stg Customers - Customer" - } - ], - "effective_type": "type/Integer", - "id": 93, - "visibility_type": "normal", - "display_name": "Stg Customers - Customer → Customer ID", - "fingerprint": { - "global": { - "distinct-count": 100, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 25.5, - "q3": 75.5, - "max": 100.0, - "sd": 29.008358252146028, - "avg": 50.5 - } - } - }, - "base_type": "type/Integer" - }, - { - "description": null, - "semantic_type": "type/Name", - "coercion_strategy": null, - "name": "first_name", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 94, - { - "join-alias": "Stg Customers - Customer" - } - ], - "effective_type": "type/Text", - "id": 94, - "visibility_type": "normal", - "display_name": "Stg Customers - Customer → First Name", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.0 - }, - "type": { - "type/Text": { - "percent-json": 0.0, - "percent-url": 0.0, - "percent-email": 0.0, - "percent-state": 0.02, - "average-length": 5.86 - } - } - }, - "base_type": "type/Text" - }, - { - "description": null, - "semantic_type": "type/Name", - "coercion_strategy": null, - "name": "last_name", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 92, - { - "join-alias": "Stg Customers - Customer" - } - ], - "effective_type": "type/Text", - "id": 92, - "visibility_type": "normal", - "display_name": "Stg Customers - Customer → Last Name", - "fingerprint": { - "global": { - "distinct-count": 19, - "nil%": 0.0 - }, - "type": { - "type/Text": { - "percent-json": 0.0, - "percent-url": 0.0, - "percent-email": 0.0, - "percent-state": 0.0, - "average-length": 2.0 - } - } - }, - "base_type": "type/Text" - } - ], - "creator": { - "email": "dbtmetabase@example.com", - "first_name": "dbtmetabase", - "last_login": "2024-01-26T23:35:13.524402", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": null, - "date_joined": "2024-01-26T23:29:30.885378", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": null, - "query_type": "query", - "name": "Orders Customers", - "creator_id": 1, - "updated_at": "2024-01-26T23:36:46.84084Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "database": 2, - "type": "query", - "query": { - "source-table": 10, - "joins": [ - { - "fields": "all", - "strategy": "left-join", - "alias": "Stg Customers - Customer", - "condition": [ - "=", - [ - "field", - 84, - { - "base-type": "type/Integer" - } - ], - [ - "field", - 93, - { - "base-type": "type/Integer", - "join-alias": "Stg Customers - Customer" - } - ] - ], - "source-table": 12 - } - ] - } - }, - "id": 23, - "parameter_mappings": [], - "display": "table", - "entity_id": "aR8nxcwbbZSX3_DSLdOBm", - "collection_preview": true, - "last-edit-info": { - "id": 1, - "email": "dbtmetabase@example.com", - "first_name": "dbtmetabase", - "last_name": null, - "timestamp": "2024-01-26T23:34:25.467752Z" - }, - "visualization_settings": { - "table.pivot_column": "status", - "table.cell_column": "order_id" - }, - "collection": null, - "metabase_version": "v0.48.0 (f985e19)", - "parameters": [], - "dataset": false, - "created_at": "2024-01-26T23:34:25.436685", - "public_uuid": null - }, - { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 10, - "result_metadata": [ - { - "description": "This is a unique identifier for an order", - "semantic_type": null, - "coercion_strategy": null, - "name": "order_id", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 47, - null - ], - "effective_type": "type/Integer", - "id": 47, - "visibility_type": "normal", - "display_name": "Order ID", - "fingerprint": { - "global": { - "distinct-count": 99, - "nil%": 0 - }, - "type": { - "type/Number": { - "min": 1, - "q1": 25.25, - "q3": 74.75, - "max": 99, - "sd": 28.719704534890823, - "avg": 50 - } - } - }, - "base_type": "type/Integer" - }, - { - "description": "Foreign key to the customers table", - "semantic_type": "type/FK", - "coercion_strategy": null, - "name": "customer_id", - "settings": null, - "fk_target_field_id": 87, - "field_ref": [ - "field", - 84, - null - ], - "effective_type": "type/Integer", - "id": 84, - "visibility_type": "normal", - "display_name": "Customer ID", - "fingerprint": { - "global": { - "distinct-count": 62, - "nil%": 0 - }, - "type": { - "type/Number": { - "min": 1, - "q1": 25.875, - "q3": 69.625, - "max": 99, - "sd": 27.781341350472964, - "avg": 48.25252525252525 - } - } - }, - "base_type": "type/Integer" - }, - { - "description": "Date (UTC) that the order was placed", - "semantic_type": null, - "coercion_strategy": null, - "unit": "default", - "name": "order_date", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 82, - { - "temporal-unit": "default" - } - ], - "effective_type": "type/Date", - "id": 82, - "visibility_type": "normal", - "display_name": "Order Date", - "fingerprint": { - "global": { - "distinct-count": 69, - "nil%": 0 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Date" - }, - { - "description": null, - "semantic_type": "type/Category", - "coercion_strategy": null, - "name": "status", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 78, - null - ], - "effective_type": "type/Text", - "id": 78, - "visibility_type": "normal", - "display_name": "Status", - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0 - }, - "type": { - "type/Text": { - "percent-json": 0, - "percent-url": 0, - "percent-email": 0, - "percent-state": 0, - "average-length": 8.404040404040405 - } - } - }, - "base_type": "type/Text" - }, - { - "description": "Amount of the order (AUD) paid for by credit card", - "semantic_type": "type/Category", - "coercion_strategy": null, - "name": "credit_card_amount", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 76, - null - ], - "effective_type": "type/BigInteger", - "id": 76, - "visibility_type": "normal", - "display_name": "Credit Card Amount", - "fingerprint": { - "global": { - "distinct-count": 25, - "nil%": 0 - }, - "type": { - "type/Number": { - "min": 0, - "q1": 0, - "q3": 18.797054997187544, - "max": 30, - "sd": 10.959088854927673, - "avg": 8.797979797979798 - } - } - }, - "base_type": "type/BigInteger" - }, - { - "description": "Amount of the order (AUD) paid for by coupon", - "semantic_type": "type/Category", - "coercion_strategy": null, - "name": "coupon_amount", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 83, - null - ], - "effective_type": "type/BigInteger", - "id": 83, - "visibility_type": "normal", - "display_name": "Coupon Amount", - "fingerprint": { - "global": { - "distinct-count": 12, - "nil%": 0 - }, - "type": { - "type/Number": { - "min": 0, - "q1": 0, - "q3": 0.4747603274810728, - "max": 26, - "sd": 5.955012405351229, - "avg": 1.8686868686868687 - } - } - }, - "base_type": "type/BigInteger" - }, - { - "description": "Amount of the order (AUD) paid for by bank transfer", - "semantic_type": "type/Category", - "coercion_strategy": null, - "name": "bank_transfer_amount", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 81, - null - ], - "effective_type": "type/BigInteger", - "id": 81, - "visibility_type": "normal", - "display_name": "Bank Transfer Amount", - "fingerprint": { - "global": { - "distinct-count": 19, - "nil%": 0 - }, - "type": { - "type/Number": { - "min": 0, - "q1": 0, - "q3": 4.75, - "max": 26, - "sd": 7.420825132023675, - "avg": 4.151515151515151 - } - } - }, - "base_type": "type/BigInteger" - }, - { - "description": "Amount of the order (AUD) paid for by gift card", - "semantic_type": "type/Category", - "coercion_strategy": null, - "name": "gift_card_amount", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 77, - null - ], - "effective_type": "type/BigInteger", - "id": 77, - "visibility_type": "normal", - "display_name": "Gift Card Amount", - "fingerprint": { - "global": { - "distinct-count": 11, - "nil%": 0 - }, - "type": { - "type/Number": { - "min": 0, - "q1": 0, - "q3": 1.3692088763283736, - "max": 30, - "sd": 6.392362351566517, - "avg": 2.0707070707070705 - } - } - }, - "base_type": "type/BigInteger" - }, - { - "description": "Total amount (AUD) of the order", - "semantic_type": null, - "coercion_strategy": null, - "name": "amount", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 80, - null - ], - "effective_type": "type/BigInteger", - "id": 80, - "visibility_type": "normal", - "display_name": "Amount", - "fingerprint": { - "global": { - "distinct-count": 32, - "nil%": 0 - }, - "type": { - "type/Number": { - "min": 0, - "q1": 8.202945002812456, - "q3": 24.26138721247417, - "max": 58, - "sd": 10.736062525374601, - "avg": 16.88888888888889 - } - } - }, - "base_type": "type/BigInteger" - }, - { - "description": null, - "semantic_type": null, - "coercion_strategy": null, - "name": "customer_id_2", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 93, - null - ], - "effective_type": "type/Integer", - "id": 93, - "visibility_type": "normal", - "display_name": "Stg Customers - Customer → Customer ID", - "fingerprint": { - "global": { - "distinct-count": 100, - "nil%": 0 - }, - "type": { - "type/Number": { - "min": 1, - "q1": 25.5, - "q3": 75.5, - "max": 100, - "sd": 29.008358252146028, - "avg": 50.5 - } - } - }, - "base_type": "type/Integer" - }, - { - "description": null, - "semantic_type": "type/Name", - "coercion_strategy": null, - "name": "first_name", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 94, - null - ], - "effective_type": "type/Text", - "id": 94, - "visibility_type": "normal", - "display_name": "Stg Customers - Customer → First Name", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0 - }, - "type": { - "type/Text": { - "percent-json": 0, - "percent-url": 0, - "percent-email": 0, - "percent-state": 0.02, - "average-length": 5.86 - } - } - }, - "base_type": "type/Text" - }, - { - "description": null, - "semantic_type": "type/Name", - "coercion_strategy": null, - "name": "last_name", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 92, - null - ], - "effective_type": "type/Text", - "id": 92, - "visibility_type": "normal", - "display_name": "Stg Customers - Customer → Last Name", - "fingerprint": { - "global": { - "distinct-count": 19, - "nil%": 0 - }, - "type": { - "type/Text": { - "percent-json": 0, - "percent-url": 0, - "percent-email": 0, - "percent-state": 0, - "average-length": 2 - } - } - }, - "base_type": "type/Text" - } - ], - "creator": { - "email": "dbtmetabase@example.com", - "first_name": "dbtmetabase", - "last_login": "2024-01-26T23:35:13.524402", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": null, - "date_joined": "2024-01-26T23:29:30.885378", - "common_name": "dbtmetabase" - }, - "database_id": 2, - "enable_embedding": false, - "collection_id": null, - "query_type": "query", - "name": "Orders Customers Filtered", - "creator_id": 1, - "updated_at": "2024-01-26T23:35:08.864176Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "database": 2, - "type": "query", - "query": { - "source-table": "card__3", - "filter": [ - "not-null", - [ - "field", - 47, - { - "base-type": "type/Integer" - } - ] - ] - } - }, - "id": 24, - "parameter_mappings": [], - "display": "table", - "entity_id": "OLbf7Q2yHWOn6CGvptTpi", - "collection_preview": true, - "last-edit-info": { - "id": 1, - "email": "dbtmetabase@example.com", - "first_name": "dbtmetabase", - "last_name": null, - "timestamp": "2024-01-26T23:35:08.900746Z" - }, - "visualization_settings": { - "table.pivot_column": "status", - "table.cell_column": "order_id" - }, - "collection": null, - "metabase_version": "v0.48.0 (f985e19)", - "parameters": [], - "dataset": false, - "created_at": "2024-01-26T23:35:08.864176", - "public_uuid": null - } -] diff --git a/tests/fixtures/api/card/1.json b/tests/fixtures/api/card/1.json deleted file mode 100644 index b1042b7..0000000 --- a/tests/fixtures/api/card/1.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "day" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Date" - }, - { - "name": "sum", - "display_name": "Sum of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 7, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.0200644129064447, - "q3": 2.3725029928215275, - "max": 7.0, - "sd": 1.25650644505132, - "avg": 1.9038461538461537 - } - } - } - }, - { - "name": "avg", - "display_name": "Average of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 1 - ], - "fingerprint": { - "global": { - "distinct-count": 8, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.0, - "q3": 2.019031639883796, - "max": 5.0, - "sd": 0.7594097162561813, - "avg": 1.573717948717949 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": null, - "query_type": "query", - "name": "Customers, Sum of Number Of Orders and Average of Number Of Orders, Grouped by Most Recent Order (day)", - "dashboard_count": 0, - "creator_id": 1, - "updated_at": "2021-07-21T19:19:58.848286Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "day" - } - ] - ], - "aggregation": [ - [ - "sum", - [ - "field", - 40, - null - ] - ], - [ - "avg", - [ - "field", - 40, - null - ] - ] - ] - } - }, - "id": 1, - "display": "line", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:00:47.4892Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "sum", - "average" - ], - "graph.metrics": [ - "sum", - "avg" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#7172AD", - "#EF8C8C" - ] - }, - "collection": null, - "created_at": "2021-07-21T08:00:47.453351Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/10.json b/tests/fixtures/api/card/10.json deleted file mode 100644 index ca68fd2..0000000 --- a/tests/fixtures/api/card/10.json +++ /dev/null @@ -1,186 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day", - "name": "first_order", - "field_ref": [ - "field", - 39, - { - "temporal-unit": "day" - } - ], - "effective_type": "type/Date", - "id": 39, - "display_name": "first_order", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "base_type": "type/Date" - }, - { - "name": "sum", - "display_name": "Sum of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 6, - "nil%": 0.02127659574468085 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.1073874870150486, - "q3": 3.0, - "max": 5.0, - "sd": 1.2643380578934107, - "avg": 2.152173913043478 - } - } - } - }, - { - "name": "avg", - "display_name": "Average of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 1 - ], - "fingerprint": { - "global": { - "distinct-count": 8, - "nil%": 0.02127659574468085 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.019470273980893, - "q3": 1.989426104361334, - "max": 5.0, - "sd": 0.7515349295958083, - "avg": 1.596014492753623 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Number_of_orders over time", - "dashboard_count": 1, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.321381Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 39, - { - "temporal-unit": "day" - } - ] - ], - "aggregation": [ - [ - "sum", - [ - "field", - 40, - null - ] - ], - [ - "avg", - [ - "field", - 40, - null - ] - ] - ] - } - }, - "id": 10, - "display": "line", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:38.368218Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "sum", - "average" - ], - "graph.metrics": [ - "sum", - "avg" - ], - "graph.dimensions": [ - "first_order" - ], - "graph.colors": [ - "#7172AD", - "#EF8C8C" - ] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "created_at": "2021-07-21T08:01:38.347535Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/11.json b/tests/fixtures/api/card/11.json deleted file mode 100644 index 9412681..0000000 --- a/tests/fixtures/api/card/11.json +++ /dev/null @@ -1,186 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day", - "name": "first_order", - "field_ref": [ - "field", - 39, - { - "temporal-unit": "day" - } - ], - "effective_type": "type/Date", - "id": 39, - "display_name": "first_order", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "base_type": "type/Date" - }, - { - "name": "sum", - "display_name": "Sum of customer_lifetime_value", - "base_type": "type/Decimal", - "semantic_type": null, - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 33, - "nil%": 0.02127659574468085 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 17.0, - "q3": 55.93725393319377, - "max": 129.0, - "sd": 25.492672054973276, - "avg": 36.34782608695652 - } - } - } - }, - { - "name": "avg", - "display_name": "Average of customer_lifetime_value", - "base_type": "type/Decimal", - "semantic_type": null, - "field_ref": [ - "aggregation", - 1 - ], - "fingerprint": { - "global": { - "distinct-count": 35, - "nil%": 0.02127659574468085 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 15.0, - "q3": 33.53589838486224, - "max": 65.0, - "sd": 17.057530000270994, - "avg": 27.342391304347824 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customer_lifetime_value over time", - "dashboard_count": 1, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.665585Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 39, - { - "temporal-unit": "day" - } - ] - ], - "aggregation": [ - [ - "sum", - [ - "field", - 41, - null - ] - ], - [ - "avg", - [ - "field", - 41, - null - ] - ] - ] - } - }, - "id": 11, - "display": "line", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:38.544961Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "sum", - "average" - ], - "graph.metrics": [ - "sum", - "avg" - ], - "graph.dimensions": [ - "first_order" - ], - "graph.colors": [ - "#f9d45c", - "#F1B556" - ] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "created_at": "2021-07-21T08:01:38.52841Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/12.json b/tests/fixtures/api/card/12.json deleted file mode 100644 index 71d7302..0000000 --- a/tests/fixtures/api/card/12.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day-of-week", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "day-of-week" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 6.0, - "q1": 7.414213562373095, - "q3": 15.782357300628025, - "max": 38.0, - "sd": 10.488088481701515, - "avg": 12.5 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by day of the week", - "dashboard_count": 1, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.346492Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "day-of-week" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 12, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:38.676704Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#A6E7F3" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "created_at": "2021-07-21T08:01:38.662485Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/13.json b/tests/fixtures/api/card/13.json deleted file mode 100644 index fd61f16..0000000 --- a/tests/fixtures/api/card/13.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day-of-week", - "name": "first_order", - "field_ref": [ - "field", - 39, - { - "temporal-unit": "day-of-week" - } - ], - "effective_type": "type/Date", - "id": 39, - "display_name": "first_order", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 6, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 6.0, - "q1": 7.414213562373095, - "q3": 11.757359312880714, - "max": 38.0, - "sd": 10.528871870107588, - "avg": 12.5 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by day of the week", - "dashboard_count": 1, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.483723Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 39, - { - "temporal-unit": "day-of-week" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 13, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:38.821564Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "first_order" - ], - "graph.colors": [ - "#F1B556" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "created_at": "2021-07-21T08:01:38.808186Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/14.json b/tests/fixtures/api/card/14.json deleted file mode 100644 index 11745e9..0000000 --- a/tests/fixtures/api/card/14.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "month-of-year", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "month-of-year" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 8.0, - "q1": 10.25, - "q3": 30.5, - "max": 38.0, - "sd": 12.62933094031509, - "avg": 20.0 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by month of the year", - "dashboard_count": 1, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.562877Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "month-of-year" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 14, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:38.953633Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#A6E7F3" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "created_at": "2021-07-21T08:01:38.938688Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/15.json b/tests/fixtures/api/card/15.json deleted file mode 100644 index c897c1f..0000000 --- a/tests/fixtures/api/card/15.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "month-of-year", - "name": "first_order", - "field_ref": [ - "field", - 39, - { - "temporal-unit": "month-of-year" - } - ], - "effective_type": "type/Date", - "id": 39, - "display_name": "first_order", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 4, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 2.0, - "q1": 11.298221281347036, - "q3": 27.5, - "max": 38.0, - "sd": 12.96148139681572, - "avg": 20.0 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by month of the year", - "dashboard_count": 1, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.52292Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 39, - { - "temporal-unit": "month-of-year" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 15, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:39.098141Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "first_order" - ], - "graph.colors": [ - "#F1B556" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "created_at": "2021-07-21T08:01:39.084258Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/16.json b/tests/fixtures/api/card/16.json deleted file mode 100644 index f7650d5..0000000 --- a/tests/fixtures/api/card/16.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "quarter-of-year", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "quarter-of-year" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 3, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 8.0, - "q1": 15.5, - "q3": 50.0, - "max": 54.0, - "sd": 23.35237318418266, - "avg": 33.333333333333336 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by quarter of the year", - "dashboard_count": 1, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.567707Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "quarter-of-year" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 16, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:39.243522Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#A6E7F3" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "created_at": "2021-07-21T08:01:39.228965Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/17.json b/tests/fixtures/api/card/17.json deleted file mode 100644 index 2cabb0f..0000000 --- a/tests/fixtures/api/card/17.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "quarter-of-year", - "name": "first_order", - "field_ref": [ - "field", - 39, - { - "temporal-unit": "quarter-of-year" - } - ], - "effective_type": "type/Date", - "id": 39, - "display_name": "first_order", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 3, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 2.0, - "q1": 11.0, - "q3": 54.5, - "max": 60.0, - "sd": 29.280255007997, - "avg": 33.333333333333336 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by quarter of the year", - "dashboard_count": 1, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.603496Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 39, - { - "temporal-unit": "quarter-of-year" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 17, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:39.385031Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "first_order" - ], - "graph.colors": [ - "#F1B556" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "created_at": "2021-07-21T08:01:39.371067Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/2.json b/tests/fixtures/api/card/2.json deleted file mode 100644 index 68f22a1..0000000 --- a/tests/fixtures/api/card/2.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "description": "Nice KPI", - "archived": false, - "collection_position": null, - "table_id": 6, - "result_metadata": [ - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 1, - "nil%": 0 - }, - "type": { - "type/Number": { - "min": 99, - "q1": 99, - "q3": 99, - "max": 99, - "sd": null, - "avg": 99 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": null, - "query_type": "query", - "name": "Orders, Count", - "dashboard_count": 0, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:14.290572Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 6, - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 2, - "display": "scalar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:14.3056Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "Number of orders" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [] - }, - "collection": null, - "created_at": "2021-07-21T08:01:14.290572Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/23.json b/tests/fixtures/api/card/27.json similarity index 70% rename from tests/fixtures/api/card/23.json rename to tests/fixtures/api/card/27.json index d40778e..1828511 100644 --- a/tests/fixtures/api/card/23.json +++ b/tests/fixtures/api/card/27.json @@ -1,23 +1,26 @@ { - "description": null, + "cache_invalidated_at": null, + "description": "Orders and customers", "archived": false, + "view_count": 361, "collection_position": null, "table_id": 10, + "can_run_adhoc_query": true, "result_metadata": [ { "description": "This is a unique identifier for an order", - "semantic_type": null, + "semantic_type": "type/PK", "coercion_strategy": null, "name": "order_id", "settings": null, "fk_target_field_id": null, "field_ref": [ "field", - 47, + 84, null ], "effective_type": "type/Integer", - "id": 47, + "id": 84, "visibility_type": "normal", "display_name": "Order ID", "fingerprint": { @@ -44,14 +47,14 @@ "coercion_strategy": null, "name": "customer_id", "settings": null, - "fk_target_field_id": 87, + "fk_target_field_id": 94, "field_ref": [ "field", - 84, + 79, null ], "effective_type": "type/Integer", - "id": 84, + "id": 79, "visibility_type": "normal", "display_name": "Customer ID", "fingerprint": { @@ -138,6 +141,40 @@ }, "base_type": "type/Text" }, + { + "description": "Total amount (AUD) of the order", + "semantic_type": null, + "coercion_strategy": null, + "name": "amount", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 83, + null + ], + "effective_type": "type/BigInteger", + "id": 83, + "visibility_type": "normal", + "display_name": "Amount", + "fingerprint": { + "global": { + "distinct-count": 32, + "nil%": 0.0 + }, + "type": { + "type/Number": { + "min": 0.0, + "q1": 8.202945002812456, + "q3": 24.26138721247417, + "max": 58.0, + "sd": 10.736062525374601, + "avg": 16.88888888888889 + } + } + }, + "base_type": "type/BigInteger" + }, { "description": "Amount of the order (AUD) paid for by credit card", "semantic_type": "type/Category", @@ -147,11 +184,11 @@ "fk_target_field_id": null, "field_ref": [ "field", - 76, + 81, null ], "effective_type": "type/BigInteger", - "id": 76, + "id": 81, "visibility_type": "normal", "display_name": "Credit Card Amount", "fingerprint": { @@ -181,11 +218,11 @@ "fk_target_field_id": null, "field_ref": [ "field", - 83, + 76, null ], "effective_type": "type/BigInteger", - "id": 83, + "id": 76, "visibility_type": "normal", "display_name": "Coupon Amount", "fingerprint": { @@ -215,11 +252,11 @@ "fk_target_field_id": null, "field_ref": [ "field", - 81, + 77, null ], "effective_type": "type/BigInteger", - "id": 81, + "id": 77, "visibility_type": "normal", "display_name": "Bank Transfer Amount", "fingerprint": { @@ -249,11 +286,11 @@ "fk_target_field_id": null, "field_ref": [ "field", - 77, + 80, null ], "effective_type": "type/BigInteger", - "id": 77, + "id": 80, "visibility_type": "normal", "display_name": "Gift Card Amount", "fingerprint": { @@ -275,57 +312,23 @@ "base_type": "type/BigInteger" }, { - "description": "Total amount (AUD) of the order", - "semantic_type": null, - "coercion_strategy": null, - "name": "amount", - "settings": null, - "fk_target_field_id": null, - "field_ref": [ - "field", - 80, - null - ], - "effective_type": "type/BigInteger", - "id": 80, - "visibility_type": "normal", - "display_name": "Amount", - "fingerprint": { - "global": { - "distinct-count": 32, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 8.202945002812456, - "q3": 24.26138721247417, - "max": 58.0, - "sd": 10.736062525374601, - "avg": 16.88888888888889 - } - } - }, - "base_type": "type/BigInteger" - }, - { - "description": null, - "semantic_type": null, + "description": "This is a unique identifier for a customer", + "semantic_type": "type/PK", "coercion_strategy": null, "name": "customer_id_2", "settings": null, "fk_target_field_id": null, "field_ref": [ "field", - 93, + 94, { - "join-alias": "Stg Customers - Customer" + "join-alias": "Customers" } ], "effective_type": "type/Integer", - "id": 93, + "id": 94, "visibility_type": "normal", - "display_name": "Stg Customers - Customer → Customer ID", + "display_name": "Customers \u2192 Customer ID", "fingerprint": { "global": { "distinct-count": 100, @@ -345,7 +348,7 @@ "base_type": "type/Integer" }, { - "description": null, + "description": "Customer's first name. PII.", "semantic_type": "type/Name", "coercion_strategy": null, "name": "first_name", @@ -353,18 +356,18 @@ "fk_target_field_id": null, "field_ref": [ "field", - 94, + 91, { - "join-alias": "Stg Customers - Customer" + "join-alias": "Customers" } ], "effective_type": "type/Text", - "id": 94, + "id": 91, "visibility_type": "normal", - "display_name": "Stg Customers - Customer → First Name", + "display_name": "Customers \u2192 First Name", "fingerprint": { "global": { - "distinct-count": 47, + "distinct-count": 79, "nil%": 0.0 }, "type": { @@ -380,7 +383,7 @@ "base_type": "type/Text" }, { - "description": null, + "description": "Customer's last name. PII.", "semantic_type": "type/Name", "coercion_strategy": null, "name": "last_name", @@ -388,15 +391,15 @@ "fk_target_field_id": null, "field_ref": [ "field", - 92, + 90, { - "join-alias": "Stg Customers - Customer" + "join-alias": "Customers" } ], "effective_type": "type/Text", - "id": 92, + "id": 90, "visibility_type": "normal", - "display_name": "Stg Customers - Customer → Last Name", + "display_name": "Customers \u2192 Last Name", "fingerprint": { "global": { "distinct-count": 19, @@ -413,31 +416,174 @@ } }, "base_type": "type/Text" + }, + { + "description": "Date (UTC) of a customer's first order", + "semantic_type": null, + "coercion_strategy": null, + "unit": "default", + "name": "first_order", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 95, + { + "temporal-unit": "default", + "join-alias": "Customers" + } + ], + "effective_type": "type/Date", + "id": 95, + "visibility_type": "normal", + "display_name": "Customers \u2192 First Order", + "fingerprint": { + "global": { + "distinct-count": 47, + "nil%": 0.38 + }, + "type": { + "type/DateTime": { + "earliest": "2018-01-01", + "latest": "2018-04-07" + } + } + }, + "base_type": "type/Date" + }, + { + "description": "Date (UTC) of a customer's most recent order", + "semantic_type": null, + "coercion_strategy": null, + "unit": "default", + "name": "most_recent_order", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 92, + { + "temporal-unit": "default", + "join-alias": "Customers" + } + ], + "effective_type": "type/Date", + "id": 92, + "visibility_type": "normal", + "display_name": "Customers \u2192 Most Recent Order", + "fingerprint": { + "global": { + "distinct-count": 53, + "nil%": 0.38 + }, + "type": { + "type/DateTime": { + "earliest": "2018-01-09", + "latest": "2018-04-09" + } + } + }, + "base_type": "type/Date" + }, + { + "description": "Count of the number of orders a customer has placed", + "semantic_type": "type/Quantity", + "coercion_strategy": null, + "name": "number_of_orders", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 89, + { + "join-alias": "Customers" + } + ], + "effective_type": "type/BigInteger", + "id": 89, + "visibility_type": "normal", + "display_name": "Customers \u2192 order_count", + "fingerprint": { + "global": { + "distinct-count": 5, + "nil%": 0.38 + }, + "type": { + "type/Number": { + "min": 1.0, + "q1": 1.0, + "q3": 2.0901356485315583, + "max": 5.0, + "sd": 0.7779687173818424, + "avg": 1.596774193548387 + } + } + }, + "base_type": "type/BigInteger" + }, + { + "description": "Total value (AUD) of a customer's orders", + "semantic_type": null, + "coercion_strategy": null, + "name": "customer_lifetime_value", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 93, + { + "join-alias": "Customers" + } + ], + "effective_type": "type/BigInteger", + "id": 93, + "visibility_type": "normal", + "display_name": "Customers \u2192 Customer Lifetime Value", + "fingerprint": { + "global": { + "distinct-count": 36, + "nil%": 0.38 + }, + "type": { + "type/Number": { + "min": 1.0, + "q1": 13.464101615137753, + "q3": 35.46410161513776, + "max": 99.0, + "sd": 18.812245525263663, + "avg": 26.967741935483872 + } + } + }, + "base_type": "type/BigInteger" } ], "creator": { "email": "dbtmetabase@example.com", "first_name": "dbtmetabase", - "last_login": "2024-01-26T23:35:13.524402", + "last_login": "2024-06-20T06:03:33.519227Z", "is_qbnewb": false, "is_superuser": true, "id": 1, "last_name": null, - "date_joined": "2024-01-26T23:29:30.885378", + "date_joined": "2024-06-19T11:49:37.507897Z", "common_name": "dbtmetabase" }, + "initially_published_at": null, "can_write": true, "database_id": 2, "enable_embedding": false, "collection_id": null, "query_type": "query", - "name": "Orders Customers", - "last_query_start": "2024-01-26T23:36:46.40105Z", - "dashboard_count": 0, - "average_query_time": 412.0, + "name": "Orders + Customers", + "last_query_start": "2024-06-20T05:55:59.014926Z", + "dashboard_count": 1, + "last_used_at": "2024-06-20T05:55:59.079272Z", + "type": "question", + "average_query_time": 107.22222222222223, "creator_id": 1, "moderation_reviews": [], - "updated_at": "2024-01-26T23:36:46.84084Z", + "updated_at": "2024-06-20T05:55:59.117538Z", "made_public_by_id": null, "embedding_params": null, "cache_ttl": null, @@ -449,23 +595,22 @@ "joins": [ { "fields": "all", - "strategy": "left-join", - "alias": "Stg Customers - Customer", + "alias": "Customers", "condition": [ "=", [ "field", - 84, + 79, { "base-type": "type/Integer" } ], [ "field", - 93, + 94, { "base-type": "type/Integer", - "join-alias": "Stg Customers - Customer" + "join-alias": "Customers" } ] ], @@ -474,20 +619,20 @@ ] } }, - "id": 23, + "id": 27, "parameter_mappings": [], "display": "table", - "entity_id": "aR8nxcwbbZSX3_DSLdOBm", + "entity_id": "WWI6bOVB-ssXYgCHASj9E", "collection_preview": true, "last-edit-info": { "id": 1, "email": "dbtmetabase@example.com", "first_name": "dbtmetabase", "last_name": null, - "timestamp": "2024-01-26T23:34:25.467752Z" + "timestamp": "2024-06-19T12:04:21.270066Z" }, "visualization_settings": { - "table.pivot_column": "status", + "table.pivot_column": "number_of_orders", "table.cell_column": "order_id" }, "collection": { @@ -498,10 +643,9 @@ "id": "root", "can_write": true }, - "metabase_version": "v0.48.0 (f985e19)", + "metabase_version": "v0.50.5 (48f6978)", "parameters": [], - "dataset": false, - "created_at": "2024-01-26T23:34:25.436685", + "created_at": "2024-06-19T11:57:35.85999Z", "parameter_usage_count": 0, "public_uuid": null -} +} \ No newline at end of file diff --git a/tests/fixtures/api/card/24.json b/tests/fixtures/api/card/28.json similarity index 70% rename from tests/fixtures/api/card/24.json rename to tests/fixtures/api/card/28.json index 73a4aed..d7bfbed 100644 --- a/tests/fixtures/api/card/24.json +++ b/tests/fixtures/api/card/28.json @@ -1,11 +1,14 @@ { + "cache_invalidated_at": null, "description": null, "archived": false, + "view_count": 180, "collection_position": null, "table_id": 10, + "can_run_adhoc_query": true, "result_metadata": [ { - "description": "This is a unique identifier for an order", + "description": null, "semantic_type": null, "coercion_strategy": null, "name": "order_id", @@ -13,11 +16,11 @@ "fk_target_field_id": null, "field_ref": [ "field", - 47, + 84, null ], "effective_type": "type/Integer", - "id": 47, + "id": 84, "visibility_type": "normal", "display_name": "Order ID", "fingerprint": { @@ -39,19 +42,19 @@ "base_type": "type/Integer" }, { - "description": "Foreign key to the customers table", - "semantic_type": "type/FK", + "description": null, + "semantic_type": null, "coercion_strategy": null, "name": "customer_id", "settings": null, - "fk_target_field_id": 87, + "fk_target_field_id": null, "field_ref": [ "field", - 84, + 79, null ], "effective_type": "type/Integer", - "id": 84, + "id": 79, "visibility_type": "normal", "display_name": "Customer ID", "fingerprint": { @@ -73,7 +76,7 @@ "base_type": "type/Integer" }, { - "description": "Date (UTC) that the order was placed", + "description": null, "semantic_type": null, "coercion_strategy": null, "unit": "default", @@ -139,7 +142,7 @@ "base_type": "type/Text" }, { - "description": "Amount of the order (AUD) paid for by credit card", + "description": null, "semantic_type": "type/Category", "coercion_strategy": null, "name": "credit_card_amount", @@ -147,11 +150,11 @@ "fk_target_field_id": null, "field_ref": [ "field", - 76, + 81, null ], "effective_type": "type/BigInteger", - "id": 76, + "id": 81, "visibility_type": "normal", "display_name": "Credit Card Amount", "fingerprint": { @@ -173,7 +176,7 @@ "base_type": "type/BigInteger" }, { - "description": "Amount of the order (AUD) paid for by coupon", + "description": null, "semantic_type": "type/Category", "coercion_strategy": null, "name": "coupon_amount", @@ -181,11 +184,11 @@ "fk_target_field_id": null, "field_ref": [ "field", - 83, + 76, null ], "effective_type": "type/BigInteger", - "id": 83, + "id": 76, "visibility_type": "normal", "display_name": "Coupon Amount", "fingerprint": { @@ -207,7 +210,7 @@ "base_type": "type/BigInteger" }, { - "description": "Amount of the order (AUD) paid for by bank transfer", + "description": null, "semantic_type": "type/Category", "coercion_strategy": null, "name": "bank_transfer_amount", @@ -215,11 +218,11 @@ "fk_target_field_id": null, "field_ref": [ "field", - 81, + 77, null ], "effective_type": "type/BigInteger", - "id": 81, + "id": 77, "visibility_type": "normal", "display_name": "Bank Transfer Amount", "fingerprint": { @@ -241,7 +244,7 @@ "base_type": "type/BigInteger" }, { - "description": "Amount of the order (AUD) paid for by gift card", + "description": null, "semantic_type": "type/Category", "coercion_strategy": null, "name": "gift_card_amount", @@ -249,11 +252,11 @@ "fk_target_field_id": null, "field_ref": [ "field", - 77, + 80, null ], "effective_type": "type/BigInteger", - "id": 77, + "id": 80, "visibility_type": "normal", "display_name": "Gift Card Amount", "fingerprint": { @@ -275,7 +278,7 @@ "base_type": "type/BigInteger" }, { - "description": "Total amount (AUD) of the order", + "description": null, "semantic_type": null, "coercion_strategy": null, "name": "amount", @@ -283,11 +286,11 @@ "fk_target_field_id": null, "field_ref": [ "field", - 80, + 83, null ], "effective_type": "type/BigInteger", - "id": 80, + "id": 83, "visibility_type": "normal", "display_name": "Amount", "fingerprint": { @@ -317,13 +320,13 @@ "fk_target_field_id": null, "field_ref": [ "field", - 93, + 94, null ], "effective_type": "type/Integer", - "id": 93, + "id": 94, "visibility_type": "normal", - "display_name": "Stg Customers - Customer → Customer ID", + "display_name": "Customers \u2192 Customer ID", "fingerprint": { "global": { "distinct-count": 100, @@ -351,16 +354,16 @@ "fk_target_field_id": null, "field_ref": [ "field", - 94, + 91, null ], "effective_type": "type/Text", - "id": 94, + "id": 91, "visibility_type": "normal", - "display_name": "Stg Customers - Customer → First Name", + "display_name": "Customers \u2192 First Name", "fingerprint": { "global": { - "distinct-count": 47, + "distinct-count": 79, "nil%": 0 }, "type": { @@ -384,13 +387,13 @@ "fk_target_field_id": null, "field_ref": [ "field", - 92, + 90, null ], "effective_type": "type/Text", - "id": 92, + "id": 90, "visibility_type": "normal", - "display_name": "Stg Customers - Customer → Last Name", + "display_name": "Customers \u2192 Last Name", "fingerprint": { "global": { "distinct-count": 19, @@ -407,31 +410,168 @@ } }, "base_type": "type/Text" + }, + { + "description": null, + "semantic_type": null, + "coercion_strategy": null, + "unit": "default", + "name": "first_order", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 95, + { + "temporal-unit": "default" + } + ], + "effective_type": "type/Date", + "id": 95, + "visibility_type": "normal", + "display_name": "Customers \u2192 First Order", + "fingerprint": { + "global": { + "distinct-count": 47, + "nil%": 0.38 + }, + "type": { + "type/DateTime": { + "earliest": "2018-01-01", + "latest": "2018-04-07" + } + } + }, + "base_type": "type/Date" + }, + { + "description": null, + "semantic_type": null, + "coercion_strategy": null, + "unit": "default", + "name": "most_recent_order", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 92, + { + "temporal-unit": "default" + } + ], + "effective_type": "type/Date", + "id": 92, + "visibility_type": "normal", + "display_name": "Customers \u2192 Most Recent Order", + "fingerprint": { + "global": { + "distinct-count": 53, + "nil%": 0.38 + }, + "type": { + "type/DateTime": { + "earliest": "2018-01-09", + "latest": "2018-04-09" + } + } + }, + "base_type": "type/Date" + }, + { + "description": null, + "semantic_type": "type/Quantity", + "coercion_strategy": null, + "name": "number_of_orders", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 89, + null + ], + "effective_type": "type/BigInteger", + "id": 89, + "visibility_type": "normal", + "display_name": "Customers \u2192 Number Of Orders", + "fingerprint": { + "global": { + "distinct-count": 5, + "nil%": 0.38 + }, + "type": { + "type/Number": { + "min": 1, + "q1": 1, + "q3": 2.0901356485315583, + "max": 5, + "sd": 0.7779687173818424, + "avg": 1.596774193548387 + } + } + }, + "base_type": "type/BigInteger" + }, + { + "description": null, + "semantic_type": null, + "coercion_strategy": null, + "name": "customer_lifetime_value", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 93, + null + ], + "effective_type": "type/BigInteger", + "id": 93, + "visibility_type": "normal", + "display_name": "Customers \u2192 Customer Lifetime Value", + "fingerprint": { + "global": { + "distinct-count": 36, + "nil%": 0.38 + }, + "type": { + "type/Number": { + "min": 1, + "q1": 13.464101615137753, + "q3": 35.46410161513776, + "max": 99, + "sd": 18.812245525263663, + "avg": 26.967741935483872 + } + } + }, + "base_type": "type/BigInteger" } ], "creator": { "email": "dbtmetabase@example.com", "first_name": "dbtmetabase", - "last_login": "2024-01-26T23:35:13.524402", - "is_qbnewb": true, + "last_login": "2024-06-20T06:03:33.519227Z", + "is_qbnewb": false, "is_superuser": true, "id": 1, "last_name": null, - "date_joined": "2024-01-26T23:29:30.885378", + "date_joined": "2024-06-19T11:49:37.507897Z", "common_name": "dbtmetabase" }, + "initially_published_at": null, "can_write": true, "database_id": 2, "enable_embedding": false, "collection_id": null, "query_type": "query", - "name": "Orders Customers Filtered", - "last_query_start": null, - "dashboard_count": 0, - "average_query_time": null, + "name": "Orders + Customers, Filtered by Status is completed", + "last_query_start": "2024-06-19T12:09:31.377224Z", + "dashboard_count": 1, + "last_used_at": "2024-06-19T12:09:31.689381Z", + "type": "question", + "average_query_time": 264.0, "creator_id": 1, "moderation_reviews": [], - "updated_at": "2024-01-26T23:35:08.864176Z", + "updated_at": "2024-06-19T12:09:31.689381Z", "made_public_by_id": null, "embedding_params": null, "cache_ttl": null, @@ -439,30 +579,31 @@ "database": 2, "type": "query", "query": { - "source-table": "card__3", + "source-table": "card__27", "filter": [ - "not-null", + "=", [ "field", - 47, + 78, { - "base-type": "type/Integer" + "base-type": "type/Text" } - ] + ], + "completed" ] } }, - "id": 24, + "id": 28, "parameter_mappings": [], "display": "table", - "entity_id": "OLbf7Q2yHWOn6CGvptTpi", + "entity_id": "ewUj6ow4HD_vePKnXihVA", "collection_preview": true, "last-edit-info": { "id": 1, "email": "dbtmetabase@example.com", "first_name": "dbtmetabase", "last_name": null, - "timestamp": "2024-01-26T23:35:08.900746Z" + "timestamp": "2024-06-19T11:58:35.066297Z" }, "visualization_settings": { "table.pivot_column": "status", @@ -476,10 +617,9 @@ "id": "root", "can_write": true }, - "metabase_version": "v0.48.0 (f985e19)", + "metabase_version": "v0.50.5 (48f6978)", "parameters": [], - "dataset": false, - "created_at": "2024-01-26T23:35:08.864176", + "created_at": "2024-06-19T11:58:35.060527Z", "parameter_usage_count": 0, "public_uuid": null -} +} \ No newline at end of file diff --git a/tests/fixtures/api/card/29.json b/tests/fixtures/api/card/29.json new file mode 100644 index 0000000..837addf --- /dev/null +++ b/tests/fixtures/api/card/29.json @@ -0,0 +1,104 @@ +{ + "cache_invalidated_at": null, + "description": null, + "archived": false, + "view_count": 179, + "collection_position": null, + "table_id": null, + "can_run_adhoc_query": true, + "result_metadata": [ + { + "display_name": "count", + "field_ref": [ + "field", + "count", + { + "base-type": "type/BigInteger" + } + ], + "name": "count", + "base_type": "type/BigInteger", + "effective_type": "type/BigInteger", + "semantic_type": "type/Quantity", + "fingerprint": { + "global": { + "distinct-count": 1, + "nil%": 0.0 + }, + "type": { + "type/Number": { + "min": 5.0, + "q1": 5.0, + "q3": 5.0, + "max": 5.0, + "sd": null, + "avg": 5.0 + } + } + } + } + ], + "creator": { + "email": "dbtmetabase@example.com", + "first_name": "dbtmetabase", + "last_login": "2024-06-20T06:03:33.519227Z", + "is_qbnewb": false, + "is_superuser": true, + "id": 1, + "last_name": null, + "date_joined": "2024-06-19T11:49:37.507897Z", + "common_name": "dbtmetabase" + }, + "initially_published_at": null, + "can_write": true, + "database_id": 2, + "enable_embedding": false, + "collection_id": null, + "query_type": "native", + "name": "Returned Order Count SQL", + "last_query_start": "2024-06-19T12:09:31.387065Z", + "dashboard_count": 1, + "last_used_at": "2024-06-19T12:09:31.486489Z", + "type": "question", + "average_query_time": 190.5, + "creator_id": 1, + "moderation_reviews": [], + "updated_at": "2024-06-19T12:09:31.507473Z", + "made_public_by_id": null, + "embedding_params": null, + "cache_ttl": null, + "dataset_query": { + "database": 2, + "type": "native", + "native": { + "template-tags": {}, + "query": "select\n count(*)\nfrom STG_payments as p\n left join STG_orders as o on p.order_id = o.order_id\nwhere o.status = 'returned'\n;" + } + }, + "id": 29, + "parameter_mappings": [], + "display": "scalar", + "entity_id": "iCEt78jHFFT1fqTa28FOB", + "collection_preview": true, + "last-edit-info": { + "id": 1, + "email": "dbtmetabase@example.com", + "first_name": "dbtmetabase", + "last_name": null, + "timestamp": "2024-06-19T12:03:01.981604Z" + }, + "visualization_settings": {}, + "collection": { + "metabase.models.collection.root/is-root?": true, + "authority_level": null, + "name": "Our analytics", + "is_personal": false, + "id": "root", + "can_write": true + }, + "metabase_version": "v0.50.5 (48f6978)", + "parameters": [], + "created_at": "2024-06-19T12:03:01.905927Z", + "parameter_usage_count": 0, + "public_uuid": null +} \ No newline at end of file diff --git a/tests/fixtures/api/card/3.json b/tests/fixtures/api/card/3.json deleted file mode 100644 index dfd0762..0000000 --- a/tests/fixtures/api/card/3.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 1, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 100.0, - "q1": 100.0, - "q3": 100.0, - "max": 100.0, - "sd": null, - "avg": 100.0 - } - } - } - } - ], - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Total customers", - "dashboard_count": 1, - "creator_id": 2, - "updated_at": "2021-07-21T08:01:41.996Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 3, - "display": "scalar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:37.449936Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "created_at": "2021-07-21T08:01:37.434243Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/30.json b/tests/fixtures/api/card/30.json new file mode 100644 index 0000000..20d72db --- /dev/null +++ b/tests/fixtures/api/card/30.json @@ -0,0 +1,106 @@ +{ + "cache_invalidated_at": null, + "description": "Dummy 1", + "archived": false, + "view_count": 21, + "collection_position": null, + "table_id": null, + "can_run_adhoc_query": true, + "result_metadata": [ + { + "display_name": "?column?", + "field_ref": [ + "field", + "?column?", + { + "base-type": "type/Integer" + } + ], + "name": "?column?", + "base_type": "type/Integer", + "effective_type": "type/Integer", + "semantic_type": null, + "fingerprint": { + "global": { + "distinct-count": 1, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 1, + "q1": 1, + "q3": 1, + "max": 1, + "sd": null, + "avg": 1 + } + } + } + } + ], + "creator": { + "email": "dbtmetabase@example.com", + "first_name": "dbtmetabase", + "last_login": "2024-06-20T06:03:33.519227Z", + "is_qbnewb": false, + "is_superuser": true, + "id": 1, + "last_name": null, + "date_joined": "2024-06-19T11:49:37.507897Z", + "common_name": "dbtmetabase" + }, + "initially_published_at": null, + "can_write": true, + "database_id": 2, + "enable_embedding": false, + "collection_id": null, + "query_type": "native", + "name": "Dummy", + "last_query_start": "2024-06-20T05:56:57.283068Z", + "dashboard_count": 0, + "last_used_at": "2024-06-20T05:56:57.295379Z", + "type": "question", + "average_query_time": 28.0, + "creator_id": 1, + "moderation_reviews": [], + "updated_at": "2024-06-20T05:57:05.732801Z", + "made_public_by_id": null, + "embedding_params": null, + "cache_ttl": null, + "dataset_query": { + "database": 2, + "type": "native", + "native": { + "template-tags": {}, + "query": "select 1;" + } + }, + "id": 30, + "parameter_mappings": [], + "display": "table", + "entity_id": "32PjfPIi_tmY3317kwVnd", + "collection_preview": true, + "last-edit-info": { + "id": 1, + "email": "dbtmetabase@example.com", + "first_name": "dbtmetabase", + "last_name": null, + "timestamp": "2024-06-20T05:57:05.744383Z" + }, + "visualization_settings": { + "table.pivot_column": "?column?" + }, + "collection": { + "metabase.models.collection.root/is-root?": true, + "authority_level": null, + "name": "Our analytics", + "is_personal": false, + "id": "root", + "can_write": true + }, + "metabase_version": "v0.50.5 (48f6978)", + "parameters": [], + "created_at": "2024-06-20T05:56:33.051625Z", + "parameter_usage_count": 0, + "public_uuid": null +} \ No newline at end of file diff --git a/tests/fixtures/api/card/31.json b/tests/fixtures/api/card/31.json new file mode 100644 index 0000000..62870a9 --- /dev/null +++ b/tests/fixtures/api/card/31.json @@ -0,0 +1,106 @@ +{ + "cache_invalidated_at": null, + "description": "Dummy 2", + "archived": false, + "view_count": 21, + "collection_position": null, + "table_id": null, + "can_run_adhoc_query": true, + "result_metadata": [ + { + "display_name": "?column?", + "field_ref": [ + "field", + "?column?", + { + "base-type": "type/Integer" + } + ], + "name": "?column?", + "base_type": "type/Integer", + "effective_type": "type/Integer", + "semantic_type": null, + "fingerprint": { + "global": { + "distinct-count": 1, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 2, + "q1": 2, + "q3": 2, + "max": 2, + "sd": null, + "avg": 2 + } + } + } + } + ], + "creator": { + "email": "dbtmetabase@example.com", + "first_name": "dbtmetabase", + "last_login": "2024-06-20T06:03:33.519227Z", + "is_qbnewb": false, + "is_superuser": true, + "id": 1, + "last_name": null, + "date_joined": "2024-06-19T11:49:37.507897Z", + "common_name": "dbtmetabase" + }, + "initially_published_at": null, + "can_write": true, + "database_id": 2, + "enable_embedding": false, + "collection_id": null, + "query_type": "native", + "name": "Dummy", + "last_query_start": "2024-06-20T05:57:12.286765Z", + "dashboard_count": 0, + "last_used_at": "2024-06-20T05:57:12.297288Z", + "type": "question", + "average_query_time": 24.0, + "creator_id": 1, + "moderation_reviews": [], + "updated_at": "2024-06-20T05:57:18.515991Z", + "made_public_by_id": null, + "embedding_params": null, + "cache_ttl": null, + "dataset_query": { + "database": 2, + "type": "native", + "native": { + "template-tags": {}, + "query": "select 2;" + } + }, + "id": 31, + "parameter_mappings": [], + "display": "table", + "entity_id": "y_3jQjY9IbZEBAZ8xLoPN", + "collection_preview": true, + "last-edit-info": { + "id": 1, + "email": "dbtmetabase@example.com", + "first_name": "dbtmetabase", + "last_name": null, + "timestamp": "2024-06-20T05:57:18.528579Z" + }, + "visualization_settings": { + "table.pivot_column": "?column?" + }, + "collection": { + "metabase.models.collection.root/is-root?": true, + "authority_level": null, + "name": "Our analytics", + "is_personal": false, + "id": "root", + "can_write": true + }, + "metabase_version": "v0.50.5 (48f6978)", + "parameters": [], + "created_at": "2024-06-20T05:56:45.033599Z", + "parameter_usage_count": 0, + "public_uuid": null +} \ No newline at end of file diff --git a/tests/fixtures/api/card/32.json b/tests/fixtures/api/card/32.json new file mode 100644 index 0000000..2a2aabd --- /dev/null +++ b/tests/fixtures/api/card/32.json @@ -0,0 +1,342 @@ +{ + "cache_invalidated_at": null, + "description": "CTE SQL", + "archived": false, + "view_count": 12, + "collection_position": null, + "table_id": null, + "can_run_adhoc_query": true, + "result_metadata": [ + { + "display_name": "order_id", + "field_ref": [ + "field", + "order_id", + { + "base-type": "type/Integer" + } + ], + "name": "order_id", + "base_type": "type/Integer", + "effective_type": "type/Integer", + "semantic_type": null, + "fingerprint": { + "global": { + "distinct-count": 67, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 2, + "q1": 21.25, + "q3": 56.75, + "max": 76, + "sd": 21.08874820298452, + "avg": 38.701492537313435 + } + } + } + }, + { + "display_name": "customer_id", + "field_ref": [ + "field", + "customer_id", + { + "base-type": "type/Integer" + } + ], + "name": "customer_id", + "base_type": "type/Integer", + "effective_type": "type/Integer", + "semantic_type": null, + "fingerprint": { + "global": { + "distinct-count": 48, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 1, + "q1": 24.625, + "q3": 69.7752551286084, + "max": 99, + "sd": 28.40534122698791, + "avg": 46.985074626865675 + } + } + } + }, + { + "display_name": "order_date", + "field_ref": [ + "field", + "order_date", + { + "base-type": "type/Date" + } + ], + "name": "order_date", + "base_type": "type/Date", + "effective_type": "type/Date", + "semantic_type": null, + "fingerprint": { + "global": { + "distinct-count": 48, + "nil%": 0 + }, + "type": { + "type/DateTime": { + "earliest": "2018-01-02T00:00:00Z", + "latest": "2018-03-20T00:00:00Z" + } + } + } + }, + { + "display_name": "status", + "field_ref": [ + "field", + "status", + { + "base-type": "type/Text" + } + ], + "name": "status", + "base_type": "type/Text", + "effective_type": "type/Text", + "semantic_type": "type/Category", + "fingerprint": { + "global": { + "distinct-count": 1, + "nil%": 0 + }, + "type": { + "type/Text": { + "percent-json": 0, + "percent-url": 0, + "percent-email": 0, + "percent-state": 0, + "average-length": 9 + } + } + } + }, + { + "display_name": "credit_card_amount", + "field_ref": [ + "field", + "credit_card_amount", + { + "base-type": "type/BigInteger" + } + ], + "name": "credit_card_amount", + "base_type": "type/BigInteger", + "effective_type": "type/BigInteger", + "semantic_type": null, + "fingerprint": { + "global": { + "distinct-count": 23, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 0, + "q1": 0.04114159559085226, + "q3": 18.914213562373096, + "max": 30, + "sd": 10.838625503455733, + "avg": 9.35820895522388 + } + } + } + }, + { + "display_name": "coupon_amount", + "field_ref": [ + "field", + "coupon_amount", + { + "base-type": "type/BigInteger" + } + ], + "name": "coupon_amount", + "base_type": "type/BigInteger", + "effective_type": "type/BigInteger", + "semantic_type": null, + "fingerprint": { + "global": { + "distinct-count": 9, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 0, + "q1": 0, + "q3": 0.45220794454572616, + "max": 26, + "sd": 6.053134245386682, + "avg": 1.8955223880597014 + } + } + } + }, + { + "display_name": "bank_transfer_amount", + "field_ref": [ + "field", + "bank_transfer_amount", + { + "base-type": "type/BigInteger" + } + ], + "name": "bank_transfer_amount", + "base_type": "type/BigInteger", + "effective_type": "type/BigInteger", + "semantic_type": null, + "fingerprint": { + "global": { + "distinct-count": 16, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 0, + "q1": 0, + "q3": 3.775255128608411, + "max": 26, + "sd": 6.7730209474362155, + "avg": 3.626865671641791 + } + } + } + }, + { + "display_name": "gift_card_amount", + "field_ref": [ + "field", + "gift_card_amount", + { + "base-type": "type/BigInteger" + } + ], + "name": "gift_card_amount", + "base_type": "type/BigInteger", + "effective_type": "type/BigInteger", + "semantic_type": null, + "fingerprint": { + "global": { + "distinct-count": 7, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 0, + "q1": 0, + "q3": 2.5479849964495047, + "max": 28, + "sd": 5.306226341936319, + "avg": 1.5820895522388059 + } + } + } + }, + { + "display_name": "amount", + "field_ref": [ + "field", + "amount", + { + "base-type": "type/BigInteger" + } + ], + "name": "amount", + "base_type": "type/BigInteger", + "effective_type": "type/BigInteger", + "semantic_type": null, + "fingerprint": { + "global": { + "distinct-count": 30, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 0, + "q1": 8.085786437626904, + "q3": 23.806287056638602, + "max": 58, + "sd": 10.43352457692227, + "avg": 16.46268656716418 + } + } + } + } + ], + "creator": { + "email": "dbtmetabase@example.com", + "first_name": "dbtmetabase", + "last_login": "2024-06-20T06:03:33.519227Z", + "is_qbnewb": false, + "is_superuser": true, + "id": 1, + "last_name": null, + "date_joined": "2024-06-19T11:49:37.507897Z", + "common_name": "dbtmetabase" + }, + "initially_published_at": null, + "can_write": true, + "database_id": 2, + "enable_embedding": false, + "collection_id": null, + "query_type": "native", + "name": "Completed Orders CTE SQL", + "last_query_start": null, + "dashboard_count": 0, + "last_used_at": null, + "type": "question", + "average_query_time": null, + "creator_id": 1, + "moderation_reviews": [], + "updated_at": "2024-06-20T06:01:34.470497Z", + "made_public_by_id": null, + "embedding_params": null, + "cache_ttl": null, + "dataset_query": { + "database": 2, + "type": "native", + "native": { + "template-tags": {}, + "query": "with completed_orders as (\n\n select * from Orders where status = 'completed'\n\n)\n\nselect * from completed_orders" + } + }, + "id": 32, + "parameter_mappings": [], + "display": "table", + "entity_id": "6jo5ucWZF4jBmf8OmRajs", + "collection_preview": true, + "last-edit-info": { + "id": 1, + "email": "dbtmetabase@example.com", + "first_name": "dbtmetabase", + "last_name": null, + "timestamp": "2024-06-20T06:01:34.486033Z" + }, + "visualization_settings": { + "table.pivot_column": "status", + "table.cell_column": "order_id" + }, + "collection": { + "metabase.models.collection.root/is-root?": true, + "authority_level": null, + "name": "Our analytics", + "is_personal": false, + "id": "root", + "can_write": true + }, + "metabase_version": "v0.50.5 (48f6978)", + "parameters": [], + "created_at": "2024-06-20T06:01:34.470497Z", + "parameter_usage_count": 0, + "public_uuid": null +} \ No newline at end of file diff --git a/tests/fixtures/api/card/4.json b/tests/fixtures/api/card/4.json deleted file mode 100644 index c700bfc..0000000 --- a/tests/fixtures/api/card/4.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 1, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 0.0, - "q3": 0.0, - "max": 0.0, - "sd": null, - "avg": 0.0 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customers added in the last 30 days", - "dashboard_count": 1, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.000946Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "filter": [ - "time-interval", - [ - "field", - 42, - null - ], - -30, - "day" - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 4, - "display": "scalar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:37.545719Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "created_at": "2021-07-21T08:01:37.535187Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/5.json b/tests/fixtures/api/card/5.json deleted file mode 100644 index 90e70f3..0000000 --- a/tests/fixtures/api/card/5.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 1, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 0.0, - "q3": 0.0, - "max": 0.0, - "sd": null, - "avg": 0.0 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customers added in the last 30 days", - "dashboard_count": 1, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.157282Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "filter": [ - "time-interval", - [ - "field", - 39, - null - ], - -30, - "day" - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 5, - "display": "scalar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:37.641827Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "created_at": "2021-07-21T08:01:37.630969Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/6.json b/tests/fixtures/api/card/6.json deleted file mode 100644 index 1cf9abc..0000000 --- a/tests/fixtures/api/card/6.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": "type/Quantity", - "coercion_strategy": null, - "name": "number_of_orders", - "field_ref": [ - "field", - 40, - { - "binning": { - "strategy": "num-bins", - "min-value": 1.0, - "max-value": 5.0, - "num-bins": 8, - "bin-width": 0.5 - } - } - ], - "effective_type": "type/BigInteger", - "id": 40, - "display_name": "number_of_orders", - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.38 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.0, - "q3": 2.0901356485315583, - "max": 5.0, - "sd": 0.7779687173818424, - "avg": 1.596774193548387 - } - } - }, - "base_type": "type/Decimal" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 4.0, - "q3": 34.25, - "max": 38.0, - "sd": 16.492422502470642, - "avg": 20.0 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customers by number_of_orders", - "dashboard_count": 1, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.107313Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 40, - { - "binning": { - "strategy": "default" - } - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 6, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:37.76733Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "number_of_orders" - ], - "graph.colors": [ - "#EF8C8C" - ] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "created_at": "2021-07-21T08:01:37.754606Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/7.json b/tests/fixtures/api/card/7.json deleted file mode 100644 index cd7e2e7..0000000 --- a/tests/fixtures/api/card/7.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "name": "customer_lifetime_value", - "field_ref": [ - "field", - 41, - { - "binning": { - "strategy": "num-bins", - "min-value": 0.0, - "max-value": 100.0, - "num-bins": 8, - "bin-width": 12.5 - } - } - ], - "effective_type": "type/BigInteger", - "id": 41, - "display_name": "customer_lifetime_value", - "fingerprint": { - "global": { - "distinct-count": 36, - "nil%": 0.38 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 13.464101615137753, - "q3": 35.46410161513776, - "max": 99.0, - "sd": 18.812245525263663, - "avg": 26.967741935483872 - } - } - }, - "base_type": "type/Decimal" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 8, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 3.0, - "q3": 17.5, - "max": 38.0, - "sd": 12.294017127971522, - "avg": 12.5 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customers by customer_lifetime_value", - "dashboard_count": 1, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.20895Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 41, - { - "binning": { - "strategy": "default" - } - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 7, - "display": "bar", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:37.870294Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "customer_lifetime_value" - ], - "graph.colors": [ - "#A6E7F3" - ] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "created_at": "2021-07-21T08:01:37.858387Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/8.json b/tests/fixtures/api/card/8.json deleted file mode 100644 index 3b881dd..0000000 --- a/tests/fixtures/api/card/8.json +++ /dev/null @@ -1,186 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "day" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Date" - }, - { - "name": "sum", - "display_name": "Sum of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 7, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.0200644129064447, - "q3": 2.3725029928215275, - "max": 7.0, - "sd": 1.25650644505132, - "avg": 1.9038461538461537 - } - } - } - }, - { - "name": "avg", - "display_name": "Average of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 1 - ], - "fingerprint": { - "global": { - "distinct-count": 8, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.0, - "q3": 2.019031639883796, - "max": 5.0, - "sd": 0.7594097162561813, - "avg": 1.573717948717949 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Number_of_orders over time", - "dashboard_count": 1, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.368004Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "day" - } - ] - ], - "aggregation": [ - [ - "sum", - [ - "field", - 40, - null - ] - ], - [ - "avg", - [ - "field", - 40, - null - ] - ] - ] - } - }, - "id": 8, - "display": "line", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:38.030503Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "sum", - "average" - ], - "graph.metrics": [ - "sum", - "avg" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#7172AD", - "#EF8C8C" - ] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "created_at": "2021-07-21T08:01:38.016244Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/card/9.json b/tests/fixtures/api/card/9.json deleted file mode 100644 index 7d6f491..0000000 --- a/tests/fixtures/api/card/9.json +++ /dev/null @@ -1,186 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "day" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Date" - }, - { - "name": "sum", - "display_name": "Sum of customer_lifetime_value", - "base_type": "type/Decimal", - "semantic_type": null, - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 35, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 15.0, - "q3": 40.10050506338833, - "max": 131.0, - "sd": 26.119172295224672, - "avg": 32.15384615384615 - } - } - } - }, - { - "name": "avg", - "display_name": "Average of customer_lifetime_value", - "base_type": "type/Decimal", - "semantic_type": null, - "field_ref": [ - "aggregation", - 1 - ], - "fingerprint": { - "global": { - "distinct-count": 34, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 13.17157287525381, - "q3": 34.732050807568875, - "max": 99.0, - "sd": 17.628392521514144, - "avg": 26.39102564102564 - } - } - } - } - ], - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "can_write": true, - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customer_lifetime_value over time", - "dashboard_count": 1, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.456526Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "day" - } - ] - ], - "aggregation": [ - [ - "sum", - [ - "field", - 41, - null - ] - ], - [ - "avg", - [ - "field", - 41, - null - ] - ] - ] - } - }, - "id": 9, - "display": "line", - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:38.208516Z" - }, - "visualization_settings": { - "graph.series_labels": [ - "sum", - "average" - ], - "graph.metrics": [ - "sum", - "avg" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#f9d45c", - "#F1B556" - ] - }, - "collection": { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - "created_at": "2021-07-21T08:01:38.189846Z", - "public_uuid": null -} \ No newline at end of file diff --git a/tests/fixtures/api/collection.json b/tests/fixtures/api/collection.json index 9c307a1..addf935 100644 --- a/tests/fixtures/api/collection.json +++ b/tests/fixtures/api/collection.json @@ -1,49 +1,29 @@ [ { + "authority_level": null, + "can_write": true, "name": "Our analytics", - "id": "root", - "parent_id": null, - "effective_location": null, "effective_ancestors": [], - "can_write": true + "effective_location": null, + "parent_id": null, + "id": "root", + "is_personal": false }, { "authority_level": null, "description": null, "archived": false, "slug": "dbtmetabase_s_personal_collection", - "color": "#31698A", "can_write": true, "name": "dbtmetabase's Personal Collection", "personal_owner_id": 1, - "id": 1, - "location": "/", - "namespace": null - }, - { - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "can_write": true, - "name": "A look at your customers table", - "personal_owner_id": null, - "id": 3, - "location": "/2/", - "namespace": null - }, - { - "authority_level": null, - "description": null, - "archived": false, - "slug": "automatically_generated_dashboards", - "color": "#509EE3", - "can_write": true, - "name": "Automatically Generated Dashboards", - "personal_owner_id": null, + "type": null, + "is_sample": false, "id": 2, + "entity_id": "4NxVlV7MwKdihROHJkxCx", "location": "/", - "namespace": null + "namespace": null, + "is_personal": true, + "created_at": "2024-06-19T11:49:38.03895Z" } ] \ No newline at end of file diff --git a/tests/fixtures/api/collection/1.json b/tests/fixtures/api/collection/1.json deleted file mode 100644 index 4c517b0..0000000 --- a/tests/fixtures/api/collection/1.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "authority_level": null, - "description": null, - "archived": false, - "slug": "dbtmetabase_s_personal_collection", - "color": "#31698A", - "can_write": true, - "name": "dbtmetabase's Personal Collection", - "personal_owner_id": 1, - "effective_ancestors": [ - { - "metabase.models.collection.root/is-root?": true, - "name": "Our analytics", - "id": "root", - "can_write": true - } - ], - "effective_location": "/", - "parent_id": null, - "id": 1, - "location": "/", - "namespace": null -} \ No newline at end of file diff --git a/tests/fixtures/api/collection/2.json b/tests/fixtures/api/collection/2.json deleted file mode 100644 index 080a840..0000000 --- a/tests/fixtures/api/collection/2.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "authority_level": null, - "description": null, - "archived": false, - "slug": "automatically_generated_dashboards", - "color": "#509EE3", - "can_write": true, - "name": "Automatically Generated Dashboards", - "personal_owner_id": null, - "effective_ancestors": [ - { - "metabase.models.collection.root/is-root?": true, - "name": "Our analytics", - "id": "root", - "can_write": true - } - ], - "effective_location": "/", - "parent_id": null, - "id": 2, - "location": "/", - "namespace": null -} \ No newline at end of file diff --git a/tests/fixtures/api/collection/2/items.json b/tests/fixtures/api/collection/2/items.json deleted file mode 100644 index 75a1f83..0000000 --- a/tests/fixtures/api/collection/2/items.json +++ /dev/null @@ -1,9 +0,0 @@ -[ - { - "description": "Automatically generated cards.", - "can_write": true, - "name": "A look at your customers table", - "id": 3, - "model": "collection" - } -] \ No newline at end of file diff --git a/tests/fixtures/api/collection/3.json b/tests/fixtures/api/collection/3.json deleted file mode 100644 index 243332d..0000000 --- a/tests/fixtures/api/collection/3.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "authority_level": null, - "description": "Automatically generated cards.", - "archived": false, - "slug": "a_look_at_your_customers_table", - "color": "#f9d45c", - "can_write": true, - "name": "A look at your customers table", - "personal_owner_id": null, - "effective_ancestors": [ - { - "metabase.models.collection.root/is-root?": true, - "name": "Our analytics", - "id": "root", - "can_write": true - }, - { - "name": "Automatically Generated Dashboards", - "id": 2, - "can_write": true - } - ], - "effective_location": "/2/", - "parent_id": 2, - "id": 3, - "location": "/2/", - "namespace": null -} \ No newline at end of file diff --git a/tests/fixtures/api/collection/3/items.json b/tests/fixtures/api/collection/3/items.json deleted file mode 100644 index e5e7a91..0000000 --- a/tests/fixtures/api/collection/3/items.json +++ /dev/null @@ -1,273 +0,0 @@ -[ - { - "description": null, - "collection_position": 1, - "name": "A look at your customers table", - "id": 1, - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:39.542335Z" - }, - "favorite": false, - "model": "dashboard" - }, - { - "description": null, - "collection_position": null, - "name": "Customer_lifetime_value over time", - "id": 11, - "display": "line", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:38.544961Z" - }, - "favorite": false, - "model": "card" - }, - { - "description": null, - "collection_position": null, - "name": "Customer_lifetime_value over time", - "id": 9, - "display": "line", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:38.208516Z" - }, - "favorite": false, - "model": "card" - }, - { - "description": null, - "collection_position": null, - "name": "Customers added in the last 30 days", - "id": 4, - "display": "scalar", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:37.545719Z" - }, - "favorite": false, - "model": "card" - }, - { - "description": null, - "collection_position": null, - "name": "Customers added in the last 30 days", - "id": 5, - "display": "scalar", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:37.641827Z" - }, - "favorite": false, - "model": "card" - }, - { - "description": null, - "collection_position": null, - "name": "Customers by customer_lifetime_value", - "id": 7, - "display": "bar", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:37.870294Z" - }, - "favorite": false, - "model": "card" - }, - { - "description": null, - "collection_position": null, - "name": "Customers by number_of_orders", - "id": 6, - "display": "bar", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:37.76733Z" - }, - "favorite": false, - "model": "card" - }, - { - "description": null, - "collection_position": null, - "name": "Number_of_orders over time", - "id": 8, - "display": "line", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:38.030503Z" - }, - "favorite": false, - "model": "card" - }, - { - "description": null, - "collection_position": null, - "name": "Number_of_orders over time", - "id": 10, - "display": "line", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:38.368218Z" - }, - "favorite": false, - "model": "card" - }, - { - "description": null, - "collection_position": null, - "name": "Timestamp by day of the week", - "id": 12, - "display": "bar", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:38.676704Z" - }, - "favorite": false, - "model": "card" - }, - { - "description": null, - "collection_position": null, - "name": "Timestamp by day of the week", - "id": 13, - "display": "bar", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:38.821564Z" - }, - "favorite": false, - "model": "card" - }, - { - "description": null, - "collection_position": null, - "name": "Timestamp by month of the year", - "id": 15, - "display": "bar", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:39.098141Z" - }, - "favorite": false, - "model": "card" - }, - { - "description": null, - "collection_position": null, - "name": "Timestamp by month of the year", - "id": 14, - "display": "bar", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:38.953633Z" - }, - "favorite": false, - "model": "card" - }, - { - "description": null, - "collection_position": null, - "name": "Timestamp by quarter of the year", - "id": 17, - "display": "bar", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:39.385031Z" - }, - "favorite": false, - "model": "card" - }, - { - "description": null, - "collection_position": null, - "name": "Timestamp by quarter of the year", - "id": 16, - "display": "bar", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:39.243522Z" - }, - "favorite": false, - "model": "card" - }, - { - "description": null, - "collection_position": null, - "name": "Total customers", - "id": 3, - "display": "scalar", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:37.449936Z" - }, - "favorite": false, - "model": "card" - }, - { - "description": null, - "collection_position": null, - "name": "Missing", - "id": 404, - "display": "scalar", - "last-edit-info": { - "id": 1, - "last_name": "", - "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:37.449936Z" - }, - "favorite": false, - "model": "card" - } -] diff --git a/tests/fixtures/api/collection/root/items.json b/tests/fixtures/api/collection/root/items.json index 5f52f90..95c9581 100644 --- a/tests/fixtures/api/collection/root/items.json +++ b/tests/fixtures/api/collection/root/items.json @@ -1,80 +1,159 @@ [ { - "description": null, + "description": "CTE SQL", + "collection_position": null, "can_write": true, - "name": "dbtmetabase's Personal Collection", - "id": 1, - "model": "collection" + "database_id": null, + "collection_id": null, + "name": "Completed Orders CTE SQL", + "fully_parameterized": true, + "moderated_status": null, + "id": 32, + "display": "table", + "entity_id": "6jo5ucWZF4jBmf8OmRajs", + "collection_preview": true, + "last-edit-info": { + "id": 1, + "last_name": null, + "first_name": "dbtmetabase", + "email": "dbtmetabase@example.com", + "timestamp": "2024-06-20T06:01:34.486033Z" + }, + "location": null, + "model": "card" }, { - "description": null, + "description": "Dummy 1", + "collection_position": null, "can_write": true, - "name": "Automatically Generated Dashboards", - "id": 2, - "model": "collection" + "database_id": null, + "collection_id": null, + "name": "Dummy", + "fully_parameterized": true, + "moderated_status": null, + "id": 30, + "display": "table", + "entity_id": "32PjfPIi_tmY3317kwVnd", + "collection_preview": true, + "last-edit-info": { + "id": 1, + "last_name": null, + "first_name": "dbtmetabase", + "email": "dbtmetabase@example.com", + "timestamp": "2024-06-20T05:57:05.744383Z" + }, + "location": null, + "model": "card" }, { - "description": null, + "description": "Dummy 2", "collection_position": null, - "name": "Customers, Sum of Number Of Orders and Average of Number Of Orders, Grouped by Most Recent Order (day)", - "id": 1, - "display": "line", + "can_write": true, + "database_id": null, + "collection_id": null, + "name": "Dummy", + "fully_parameterized": true, + "moderated_status": null, + "id": 31, + "display": "table", + "entity_id": "y_3jQjY9IbZEBAZ8xLoPN", + "collection_preview": true, "last-edit-info": { "id": 1, - "last_name": "", + "last_name": null, "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:00:47.4892Z" + "email": "dbtmetabase@example.com", + "timestamp": "2024-06-20T05:57:18.528579Z" }, - "favorite": false, + "location": null, "model": "card" }, { - "description": "Nice KPI", + "description": "Orders and customers", "collection_position": null, - "name": "Orders, Count", - "id": 2, - "display": "scalar", + "can_write": true, + "database_id": null, + "collection_id": null, + "name": "Orders + Customers", + "fully_parameterized": true, + "moderated_status": null, + "id": 27, + "display": "table", + "entity_id": "WWI6bOVB-ssXYgCHASj9E", + "collection_preview": true, "last-edit-info": { "id": 1, - "last_name": "", + "last_name": null, "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2021-07-21T08:01:14.3056Z" + "email": "dbtmetabase@example.com", + "timestamp": "2024-06-19T12:04:21.270066Z" }, - "favorite": false, + "location": null, "model": "card" }, { "description": null, "collection_position": null, - "name": "Orders Customers", - "id": 23, + "can_write": true, + "database_id": null, + "collection_id": null, + "name": "Orders + Customers, Filtered by Status is completed", + "fully_parameterized": true, + "moderated_status": null, + "id": 28, "display": "table", + "entity_id": "ewUj6ow4HD_vePKnXihVA", + "collection_preview": true, "last-edit-info": { "id": 1, - "email": "dbtmetabase@example.com", - "first_name": "dbtmetabase", "last_name": null, - "timestamp": "2024-01-26T23:34:25.467752Z" + "first_name": "dbtmetabase", + "email": "dbtmetabase@example.com", + "timestamp": "2024-06-19T11:58:35.066297Z" }, - "favorite": false, + "location": null, "model": "card" }, { "description": null, "collection_position": null, - "name": "Orders Customers Filtered", - "id": 24, - "display": "table", + "can_write": true, + "database_id": null, + "collection_id": null, + "name": "Returned Order Count SQL", + "fully_parameterized": true, + "moderated_status": null, + "id": 29, + "display": "scalar", + "entity_id": "iCEt78jHFFT1fqTa28FOB", + "collection_preview": true, "last-edit-info": { "id": 1, - "last_name": "", + "last_name": null, "first_name": "dbtmetabase", - "email": "user@example.com", - "timestamp": "2024-01-21T08:01:37.449936Z" + "email": "dbtmetabase@example.com", + "timestamp": "2024-06-19T12:03:01.981604Z" }, - "favorite": false, + "location": null, "model": "card" + }, + { + "description": "Dashboard is a dashboard is a dashboard", + "collection_position": null, + "can_write": true, + "database_id": null, + "collection_id": null, + "name": "The Dashboard", + "id": 2, + "entity_id": "tAP447G_z1qHPtZeJkc2J", + "last-edit-info": { + "id": 1, + "last_name": null, + "first_name": "dbtmetabase", + "email": "dbtmetabase@example.com", + "timestamp": "2024-06-19T12:03:22.501237Z" + }, + "location": null, + "model": "dashboard" } -] +] \ No newline at end of file diff --git a/tests/fixtures/api/dashboard.json b/tests/fixtures/api/dashboard.json deleted file mode 100644 index 5c686e8..0000000 --- a/tests/fixtures/api/dashboard.json +++ /dev/null @@ -1,54 +0,0 @@ -[ - { - "description": null, - "archived": false, - "collection_position": 1, - "creator": { - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_login": "2021-07-21T19:25:28.6083Z", - "is_qbnewb": false, - "is_superuser": true, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase" - }, - "enable_embedding": false, - "collection_id": 3, - "show_in_getting_started": false, - "name": "A look at your customers table", - "caveats": null, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:37.328519Z", - "made_public_by_id": null, - "embedding_params": null, - "id": 1, - "position": null, - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:39.542335Z" - }, - "parameters": [ - { - "id": "-1693594175", - "type": "date/all-options", - "name": "most_recent_order", - "slug": "most_recent_order" - }, - { - "id": "381527929", - "type": "date/all-options", - "name": "first_order", - "slug": "first_order" - } - ], - "favorite": false, - "created_at": "2021-07-21T08:01:37.328519Z", - "public_uuid": null, - "points_of_interest": null - } -] \ No newline at end of file diff --git a/tests/fixtures/api/dashboard/1.json b/tests/fixtures/api/dashboard/1.json deleted file mode 100644 index f858d4a..0000000 --- a/tests/fixtures/api/dashboard/1.json +++ /dev/null @@ -1,2533 +0,0 @@ -{ - "description": null, - "archived": false, - "collection_position": 1, - "dashcards": [ - { - "sizeX": 18, - "series": [], - "collection_authority_level": null, - "card": { - "query_average_duration": null - }, - "updated_at": "2021-07-21T08:01:37.372373Z", - "col": 0, - "id": 1, - "parameter_mappings": [], - "card_id": null, - "visualization_settings": { - "text": "# Summary", - "virtual_card": { - "name": null, - "display": "text", - "dataset_query": {}, - "visualization_settings": {} - }, - "dashcard.background": false, - "text.align_vertical": "bottom" - }, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:37.372373Z", - "sizeY": 2, - "row": 0 - }, - { - "sizeX": 6, - "series": [], - "collection_authority_level": null, - "card": { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 1, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 100.0, - "q1": 100.0, - "q3": 100.0, - "max": 100.0, - "sd": null, - "avg": 100.0 - } - } - } - } - ], - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Total customers", - "query_average_duration": 579, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:41.996Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 3, - "display": "scalar", - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [] - }, - "created_at": "2021-07-21T08:01:37.434243Z", - "public_uuid": null - }, - "updated_at": "2021-07-21T08:01:37.466466Z", - "col": 0, - "id": 2, - "parameter_mappings": [ - { - "parameter_id": "-1693594175", - "target": [ - "dimension", - [ - "field", - 42, - null - ] - ], - "card_id": 3 - }, - { - "parameter_id": "381527929", - "target": [ - "dimension", - [ - "field", - 39, - null - ] - ], - "card_id": 3 - } - ], - "card_id": 3, - "visualization_settings": {}, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:37.466466Z", - "sizeY": 4, - "row": 2 - }, - { - "sizeX": 6, - "series": [], - "collection_authority_level": null, - "card": { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 1, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 0.0, - "q3": 0.0, - "max": 0.0, - "sd": null, - "avg": 0.0 - } - } - } - } - ], - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customers added in the last 30 days", - "query_average_duration": 38, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.000946Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "filter": [ - "time-interval", - [ - "field", - 42, - null - ], - -30, - "day" - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 4, - "display": "scalar", - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [] - }, - "created_at": "2021-07-21T08:01:37.535187Z", - "public_uuid": null - }, - "updated_at": "2021-07-21T08:01:37.567169Z", - "col": 6, - "id": 3, - "parameter_mappings": [ - { - "parameter_id": "-1693594175", - "target": [ - "dimension", - [ - "field", - 42, - null - ] - ], - "card_id": 4 - }, - { - "parameter_id": "381527929", - "target": [ - "dimension", - [ - "field", - 39, - null - ] - ], - "card_id": 4 - } - ], - "card_id": 4, - "visualization_settings": {}, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:37.567169Z", - "sizeY": 4, - "row": 2 - }, - { - "sizeX": 6, - "series": [], - "collection_authority_level": null, - "card": { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 1, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 0.0, - "q3": 0.0, - "max": 0.0, - "sd": null, - "avg": 0.0 - } - } - } - } - ], - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customers added in the last 30 days", - "query_average_duration": 132, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.157282Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "filter": [ - "time-interval", - [ - "field", - 39, - null - ], - -30, - "day" - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 5, - "display": "scalar", - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [] - }, - "created_at": "2021-07-21T08:01:37.630969Z", - "public_uuid": null - }, - "updated_at": "2021-07-21T08:01:37.652919Z", - "col": 12, - "id": 4, - "parameter_mappings": [ - { - "parameter_id": "-1693594175", - "target": [ - "dimension", - [ - "field", - 42, - null - ] - ], - "card_id": 5 - }, - { - "parameter_id": "381527929", - "target": [ - "dimension", - [ - "field", - 39, - null - ] - ], - "card_id": 5 - } - ], - "card_id": 5, - "visualization_settings": {}, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:37.652919Z", - "sizeY": 4, - "row": 2 - }, - { - "sizeX": 18, - "series": [], - "collection_authority_level": null, - "card": { - "query_average_duration": null - }, - "updated_at": "2021-07-21T08:01:37.686857Z", - "col": 0, - "id": 5, - "parameter_mappings": [], - "card_id": null, - "visualization_settings": { - "text": "# How these customers are distributed", - "virtual_card": { - "name": null, - "display": "text", - "dataset_query": {}, - "visualization_settings": {} - }, - "dashcard.background": false, - "text.align_vertical": "bottom" - }, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:37.686857Z", - "sizeY": 2, - "row": 6 - }, - { - "sizeX": 6, - "series": [], - "collection_authority_level": null, - "card": { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": "type/Quantity", - "coercion_strategy": null, - "name": "number_of_orders", - "field_ref": [ - "field", - 40, - { - "binning": { - "strategy": "num-bins", - "min-value": 1.0, - "max-value": 5.0, - "num-bins": 8, - "bin-width": 0.5 - } - } - ], - "effective_type": "type/BigInteger", - "id": 40, - "display_name": "number_of_orders", - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.38 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.0, - "q3": 2.0901356485315583, - "max": 5.0, - "sd": 0.7779687173818424, - "avg": 1.596774193548387 - } - } - }, - "base_type": "type/Decimal" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 4.0, - "q3": 34.25, - "max": 38.0, - "sd": 16.492422502470642, - "avg": 20.0 - } - } - } - } - ], - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customers by number_of_orders", - "query_average_duration": 321, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.107313Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 40, - { - "binning": { - "strategy": "default" - } - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 6, - "display": "bar", - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "number_of_orders" - ], - "graph.colors": [ - "#EF8C8C" - ] - }, - "created_at": "2021-07-21T08:01:37.754606Z", - "public_uuid": null - }, - "updated_at": "2021-07-21T08:01:37.781517Z", - "col": 0, - "id": 6, - "parameter_mappings": [ - { - "parameter_id": "-1693594175", - "target": [ - "dimension", - [ - "field", - 42, - null - ] - ], - "card_id": 6 - }, - { - "parameter_id": "381527929", - "target": [ - "dimension", - [ - "field", - 39, - null - ] - ], - "card_id": 6 - } - ], - "card_id": 6, - "visualization_settings": {}, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:37.781517Z", - "sizeY": 4, - "row": 8 - }, - { - "sizeX": 6, - "series": [], - "collection_authority_level": null, - "card": { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "name": "customer_lifetime_value", - "field_ref": [ - "field", - 41, - { - "binning": { - "strategy": "num-bins", - "min-value": 0.0, - "max-value": 100.0, - "num-bins": 8, - "bin-width": 12.5 - } - } - ], - "effective_type": "type/BigInteger", - "id": 41, - "display_name": "customer_lifetime_value", - "fingerprint": { - "global": { - "distinct-count": 36, - "nil%": 0.38 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 13.464101615137753, - "q3": 35.46410161513776, - "max": 99.0, - "sd": 18.812245525263663, - "avg": 26.967741935483872 - } - } - }, - "base_type": "type/Decimal" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 8, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 3.0, - "q3": 17.5, - "max": 38.0, - "sd": 12.294017127971522, - "avg": 12.5 - } - } - } - } - ], - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customers by customer_lifetime_value", - "query_average_duration": 163, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.20895Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 41, - { - "binning": { - "strategy": "default" - } - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 7, - "display": "bar", - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "customer_lifetime_value" - ], - "graph.colors": [ - "#A6E7F3" - ] - }, - "created_at": "2021-07-21T08:01:37.858387Z", - "public_uuid": null - }, - "updated_at": "2021-07-21T08:01:37.886739Z", - "col": 6, - "id": 7, - "parameter_mappings": [ - { - "parameter_id": "-1693594175", - "target": [ - "dimension", - [ - "field", - 42, - null - ] - ], - "card_id": 7 - }, - { - "parameter_id": "381527929", - "target": [ - "dimension", - [ - "field", - 39, - null - ] - ], - "card_id": 7 - } - ], - "card_id": 7, - "visualization_settings": {}, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:37.886739Z", - "sizeY": 4, - "row": 8 - }, - { - "sizeX": 18, - "series": [], - "collection_authority_level": null, - "card": { - "query_average_duration": null - }, - "updated_at": "2021-07-21T08:01:37.923226Z", - "col": 0, - "id": 8, - "parameter_mappings": [], - "card_id": null, - "visualization_settings": { - "text": "# These customers across time", - "virtual_card": { - "name": null, - "display": "text", - "dataset_query": {}, - "visualization_settings": {} - }, - "dashcard.background": false, - "text.align_vertical": "bottom" - }, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:37.923226Z", - "sizeY": 2, - "row": 12 - }, - { - "sizeX": 6, - "series": [], - "collection_authority_level": null, - "card": { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "day" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Date" - }, - { - "name": "sum", - "display_name": "Sum of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 7, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.0200644129064447, - "q3": 2.3725029928215275, - "max": 7.0, - "sd": 1.25650644505132, - "avg": 1.9038461538461537 - } - } - } - }, - { - "name": "avg", - "display_name": "Average of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 1 - ], - "fingerprint": { - "global": { - "distinct-count": 8, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.0, - "q3": 2.019031639883796, - "max": 5.0, - "sd": 0.7594097162561813, - "avg": 1.573717948717949 - } - } - } - } - ], - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Number_of_orders over time", - "query_average_duration": 1044, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.368004Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "day" - } - ] - ], - "aggregation": [ - [ - "sum", - [ - "field", - 40, - null - ] - ], - [ - "avg", - [ - "field", - 40, - null - ] - ] - ] - } - }, - "id": 8, - "display": "line", - "visualization_settings": { - "graph.series_labels": [ - "sum", - "average" - ], - "graph.metrics": [ - "sum", - "avg" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#7172AD", - "#EF8C8C" - ] - }, - "created_at": "2021-07-21T08:01:38.016244Z", - "public_uuid": null - }, - "updated_at": "2021-07-21T08:01:38.058235Z", - "col": 0, - "id": 9, - "parameter_mappings": [ - { - "parameter_id": "-1693594175", - "target": [ - "dimension", - [ - "field", - 42, - null - ] - ], - "card_id": 8 - }, - { - "parameter_id": "381527929", - "target": [ - "dimension", - [ - "field", - 39, - null - ] - ], - "card_id": 8 - } - ], - "card_id": 8, - "visualization_settings": {}, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:38.058235Z", - "sizeY": 4, - "row": 14 - }, - { - "sizeX": 6, - "series": [], - "collection_authority_level": null, - "card": { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "day" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Date" - }, - { - "name": "sum", - "display_name": "Sum of customer_lifetime_value", - "base_type": "type/Decimal", - "semantic_type": null, - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 35, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 15.0, - "q3": 40.10050506338833, - "max": 131.0, - "sd": 26.119172295224672, - "avg": 32.15384615384615 - } - } - } - }, - { - "name": "avg", - "display_name": "Average of customer_lifetime_value", - "base_type": "type/Decimal", - "semantic_type": null, - "field_ref": [ - "aggregation", - 1 - ], - "fingerprint": { - "global": { - "distinct-count": 34, - "nil%": 0.01886792452830189 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 13.17157287525381, - "q3": 34.732050807568875, - "max": 99.0, - "sd": 17.628392521514144, - "avg": 26.39102564102564 - } - } - } - } - ], - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customer_lifetime_value over time", - "query_average_duration": 1070, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.456526Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "day" - } - ] - ], - "aggregation": [ - [ - "sum", - [ - "field", - 41, - null - ] - ], - [ - "avg", - [ - "field", - 41, - null - ] - ] - ] - } - }, - "id": 9, - "display": "line", - "visualization_settings": { - "graph.series_labels": [ - "sum", - "average" - ], - "graph.metrics": [ - "sum", - "avg" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#f9d45c", - "#F1B556" - ] - }, - "created_at": "2021-07-21T08:01:38.189846Z", - "public_uuid": null - }, - "updated_at": "2021-07-21T08:01:38.245167Z", - "col": 6, - "id": 10, - "parameter_mappings": [ - { - "parameter_id": "-1693594175", - "target": [ - "dimension", - [ - "field", - 42, - null - ] - ], - "card_id": 9 - }, - { - "parameter_id": "381527929", - "target": [ - "dimension", - [ - "field", - 39, - null - ] - ], - "card_id": 9 - } - ], - "card_id": 9, - "visualization_settings": {}, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:38.245167Z", - "sizeY": 4, - "row": 14 - }, - { - "sizeX": 6, - "series": [], - "collection_authority_level": null, - "card": { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day", - "name": "first_order", - "field_ref": [ - "field", - 39, - { - "temporal-unit": "day" - } - ], - "effective_type": "type/Date", - "id": 39, - "display_name": "first_order", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "base_type": "type/Date" - }, - { - "name": "sum", - "display_name": "Sum of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 6, - "nil%": 0.02127659574468085 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.1073874870150486, - "q3": 3.0, - "max": 5.0, - "sd": 1.2643380578934107, - "avg": 2.152173913043478 - } - } - } - }, - { - "name": "avg", - "display_name": "Average of number_of_orders", - "base_type": "type/Decimal", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 1 - ], - "fingerprint": { - "global": { - "distinct-count": 8, - "nil%": 0.02127659574468085 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.019470273980893, - "q3": 1.989426104361334, - "max": 5.0, - "sd": 0.7515349295958083, - "avg": 1.596014492753623 - } - } - } - } - ], - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Number_of_orders over time", - "query_average_duration": 861, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.321381Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 39, - { - "temporal-unit": "day" - } - ] - ], - "aggregation": [ - [ - "sum", - [ - "field", - 40, - null - ] - ], - [ - "avg", - [ - "field", - 40, - null - ] - ] - ] - } - }, - "id": 10, - "display": "line", - "visualization_settings": { - "graph.series_labels": [ - "sum", - "average" - ], - "graph.metrics": [ - "sum", - "avg" - ], - "graph.dimensions": [ - "first_order" - ], - "graph.colors": [ - "#7172AD", - "#EF8C8C" - ] - }, - "created_at": "2021-07-21T08:01:38.347535Z", - "public_uuid": null - }, - "updated_at": "2021-07-21T08:01:38.41171Z", - "col": 12, - "id": 11, - "parameter_mappings": [ - { - "parameter_id": "-1693594175", - "target": [ - "dimension", - [ - "field", - 42, - null - ] - ], - "card_id": 10 - }, - { - "parameter_id": "381527929", - "target": [ - "dimension", - [ - "field", - 39, - null - ] - ], - "card_id": 10 - } - ], - "card_id": 10, - "visualization_settings": {}, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:38.41171Z", - "sizeY": 4, - "row": 14 - }, - { - "sizeX": 6, - "series": [], - "collection_authority_level": null, - "card": { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day", - "name": "first_order", - "field_ref": [ - "field", - 39, - { - "temporal-unit": "day" - } - ], - "effective_type": "type/Date", - "id": 39, - "display_name": "first_order", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "base_type": "type/Date" - }, - { - "name": "sum", - "display_name": "Sum of customer_lifetime_value", - "base_type": "type/Decimal", - "semantic_type": null, - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 33, - "nil%": 0.02127659574468085 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 17.0, - "q3": 55.93725393319377, - "max": 129.0, - "sd": 25.492672054973276, - "avg": 36.34782608695652 - } - } - } - }, - { - "name": "avg", - "display_name": "Average of customer_lifetime_value", - "base_type": "type/Decimal", - "semantic_type": null, - "field_ref": [ - "aggregation", - 1 - ], - "fingerprint": { - "global": { - "distinct-count": 35, - "nil%": 0.02127659574468085 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 15.0, - "q3": 33.53589838486224, - "max": 65.0, - "sd": 17.057530000270994, - "avg": 27.342391304347824 - } - } - } - } - ], - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Customer_lifetime_value over time", - "query_average_duration": 843, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.665585Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 39, - { - "temporal-unit": "day" - } - ] - ], - "aggregation": [ - [ - "sum", - [ - "field", - 41, - null - ] - ], - [ - "avg", - [ - "field", - 41, - null - ] - ] - ] - } - }, - "id": 11, - "display": "line", - "visualization_settings": { - "graph.series_labels": [ - "sum", - "average" - ], - "graph.metrics": [ - "sum", - "avg" - ], - "graph.dimensions": [ - "first_order" - ], - "graph.colors": [ - "#f9d45c", - "#F1B556" - ] - }, - "created_at": "2021-07-21T08:01:38.52841Z", - "public_uuid": null - }, - "updated_at": "2021-07-21T08:01:38.575083Z", - "col": 0, - "id": 12, - "parameter_mappings": [ - { - "parameter_id": "-1693594175", - "target": [ - "dimension", - [ - "field", - 42, - null - ] - ], - "card_id": 11 - }, - { - "parameter_id": "381527929", - "target": [ - "dimension", - [ - "field", - 39, - null - ] - ], - "card_id": 11 - } - ], - "card_id": 11, - "visualization_settings": {}, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:38.575083Z", - "sizeY": 4, - "row": 18 - }, - { - "sizeX": 6, - "series": [], - "collection_authority_level": null, - "card": { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day-of-week", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "day-of-week" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 6.0, - "q1": 7.414213562373095, - "q3": 15.782357300628025, - "max": 38.0, - "sd": 10.488088481701515, - "avg": 12.5 - } - } - } - } - ], - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by day of the week", - "query_average_duration": 277, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.346492Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "day-of-week" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 12, - "display": "bar", - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#A6E7F3" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "created_at": "2021-07-21T08:01:38.662485Z", - "public_uuid": null - }, - "updated_at": "2021-07-21T08:01:38.705264Z", - "col": 6, - "id": 13, - "parameter_mappings": [ - { - "parameter_id": "-1693594175", - "target": [ - "dimension", - [ - "field", - 42, - null - ] - ], - "card_id": 12 - }, - { - "parameter_id": "381527929", - "target": [ - "dimension", - [ - "field", - 39, - null - ] - ], - "card_id": 12 - } - ], - "card_id": 12, - "visualization_settings": {}, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:38.705264Z", - "sizeY": 4, - "row": 18 - }, - { - "sizeX": 6, - "series": [], - "collection_authority_level": null, - "card": { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "day-of-week", - "name": "first_order", - "field_ref": [ - "field", - 39, - { - "temporal-unit": "day-of-week" - } - ], - "effective_type": "type/Date", - "id": 39, - "display_name": "first_order", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 6, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 6.0, - "q1": 7.414213562373095, - "q3": 11.757359312880714, - "max": 38.0, - "sd": 10.528871870107588, - "avg": 12.5 - } - } - } - } - ], - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by day of the week", - "query_average_duration": 195, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.483723Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 39, - { - "temporal-unit": "day-of-week" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 13, - "display": "bar", - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "first_order" - ], - "graph.colors": [ - "#F1B556" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "created_at": "2021-07-21T08:01:38.808186Z", - "public_uuid": null - }, - "updated_at": "2021-07-21T08:01:38.850161Z", - "col": 12, - "id": 14, - "parameter_mappings": [ - { - "parameter_id": "-1693594175", - "target": [ - "dimension", - [ - "field", - 42, - null - ] - ], - "card_id": 13 - }, - { - "parameter_id": "381527929", - "target": [ - "dimension", - [ - "field", - 39, - null - ] - ], - "card_id": 13 - } - ], - "card_id": 13, - "visualization_settings": {}, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:38.850161Z", - "sizeY": 4, - "row": 18 - }, - { - "sizeX": 6, - "series": [], - "collection_authority_level": null, - "card": { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "month-of-year", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "month-of-year" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 8.0, - "q1": 10.25, - "q3": 30.5, - "max": 38.0, - "sd": 12.62933094031509, - "avg": 20.0 - } - } - } - } - ], - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by month of the year", - "query_average_duration": 159, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.562877Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "month-of-year" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 14, - "display": "bar", - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#A6E7F3" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "created_at": "2021-07-21T08:01:38.938688Z", - "public_uuid": null - }, - "updated_at": "2021-07-21T08:01:38.983764Z", - "col": 0, - "id": 15, - "parameter_mappings": [ - { - "parameter_id": "-1693594175", - "target": [ - "dimension", - [ - "field", - 42, - null - ] - ], - "card_id": 14 - }, - { - "parameter_id": "381527929", - "target": [ - "dimension", - [ - "field", - 39, - null - ] - ], - "card_id": 14 - } - ], - "card_id": 14, - "visualization_settings": {}, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:38.983764Z", - "sizeY": 4, - "row": 22 - }, - { - "sizeX": 6, - "series": [], - "collection_authority_level": null, - "card": { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "month-of-year", - "name": "first_order", - "field_ref": [ - "field", - 39, - { - "temporal-unit": "month-of-year" - } - ], - "effective_type": "type/Date", - "id": 39, - "display_name": "first_order", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 4, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 2.0, - "q1": 11.298221281347036, - "q3": 27.5, - "max": 38.0, - "sd": 12.96148139681572, - "avg": 20.0 - } - } - } - } - ], - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by month of the year", - "query_average_duration": 119, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.52292Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 39, - { - "temporal-unit": "month-of-year" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 15, - "display": "bar", - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "first_order" - ], - "graph.colors": [ - "#F1B556" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "created_at": "2021-07-21T08:01:39.084258Z", - "public_uuid": null - }, - "updated_at": "2021-07-21T08:01:39.132463Z", - "col": 6, - "id": 16, - "parameter_mappings": [ - { - "parameter_id": "-1693594175", - "target": [ - "dimension", - [ - "field", - 42, - null - ] - ], - "card_id": 15 - }, - { - "parameter_id": "381527929", - "target": [ - "dimension", - [ - "field", - 39, - null - ] - ], - "card_id": 15 - } - ], - "card_id": 15, - "visualization_settings": {}, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:39.132463Z", - "sizeY": 4, - "row": 22 - }, - { - "sizeX": 6, - "series": [], - "collection_authority_level": null, - "card": { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "quarter-of-year", - "name": "most_recent_order", - "field_ref": [ - "field", - 42, - { - "temporal-unit": "quarter-of-year" - } - ], - "effective_type": "type/Date", - "id": 42, - "display_name": "most_recent_order", - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 3, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 8.0, - "q1": 15.5, - "q3": 50.0, - "max": 54.0, - "sd": 23.35237318418266, - "avg": 33.333333333333336 - } - } - } - } - ], - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by quarter of the year", - "query_average_duration": 73, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.567707Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 42, - { - "temporal-unit": "quarter-of-year" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 16, - "display": "bar", - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "most_recent_order" - ], - "graph.colors": [ - "#A6E7F3" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "created_at": "2021-07-21T08:01:39.228965Z", - "public_uuid": null - }, - "updated_at": "2021-07-21T08:01:39.274309Z", - "col": 12, - "id": 17, - "parameter_mappings": [ - { - "parameter_id": "-1693594175", - "target": [ - "dimension", - [ - "field", - 42, - null - ] - ], - "card_id": 16 - }, - { - "parameter_id": "381527929", - "target": [ - "dimension", - [ - "field", - 39, - null - ] - ], - "card_id": 16 - } - ], - "card_id": 16, - "visualization_settings": {}, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:39.274309Z", - "sizeY": 4, - "row": 22 - }, - { - "sizeX": 6, - "series": [], - "collection_authority_level": null, - "card": { - "description": null, - "archived": false, - "collection_position": null, - "table_id": 7, - "result_metadata": [ - { - "semantic_type": null, - "coercion_strategy": null, - "unit": "quarter-of-year", - "name": "first_order", - "field_ref": [ - "field", - 39, - { - "temporal-unit": "quarter-of-year" - } - ], - "effective_type": "type/Date", - "id": 39, - "display_name": "first_order", - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "base_type": "type/Integer" - }, - { - "name": "count", - "display_name": "Count", - "base_type": "type/BigInteger", - "semantic_type": "type/Quantity", - "field_ref": [ - "aggregation", - 0 - ], - "fingerprint": { - "global": { - "distinct-count": 3, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 2.0, - "q1": 11.0, - "q3": 54.5, - "max": 60.0, - "sd": 29.280255007997, - "avg": 33.333333333333336 - } - } - } - } - ], - "database_id": 2, - "enable_embedding": false, - "collection_id": 3, - "query_type": "query", - "name": "Timestamp by quarter of the year", - "query_average_duration": 74, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:42.603496Z", - "made_public_by_id": null, - "embedding_params": null, - "cache_ttl": null, - "dataset_query": { - "type": "query", - "database": 2, - "query": { - "source-table": 7, - "breakout": [ - [ - "field", - 39, - { - "temporal-unit": "quarter-of-year" - } - ] - ], - "aggregation": [ - [ - "count" - ] - ] - } - }, - "id": 17, - "display": "bar", - "visualization_settings": { - "graph.series_labels": [ - "number" - ], - "graph.metrics": [ - "count" - ], - "graph.dimensions": [ - "first_order" - ], - "graph.colors": [ - "#F1B556" - ], - "graph.x_axis.title_text": "Timestamp" - }, - "created_at": "2021-07-21T08:01:39.371067Z", - "public_uuid": null - }, - "updated_at": "2021-07-21T08:01:39.426126Z", - "col": 0, - "id": 18, - "parameter_mappings": [ - { - "parameter_id": "-1693594175", - "target": [ - "dimension", - [ - "field", - 42, - null - ] - ], - "card_id": 17 - }, - { - "parameter_id": "381527929", - "target": [ - "dimension", - [ - "field", - 39, - null - ] - ], - "card_id": 17 - } - ], - "card_id": 17, - "visualization_settings": {}, - "dashboard_id": 1, - "created_at": "2021-07-21T08:01:39.426126Z", - "sizeY": 4, - "row": 26 - } - ], - "param_values": null, - "can_write": true, - "enable_embedding": false, - "collection_id": 3, - "show_in_getting_started": false, - "name": "A look at your customers table", - "caveats": null, - "collection_authority_level": null, - "creator_id": 1, - "updated_at": "2021-07-21T08:01:37.328519Z", - "made_public_by_id": null, - "embedding_params": null, - "id": 1, - "position": null, - "param_fields": { - "42": { - "id": 42, - "table_id": 7, - "display_name": "most_recent_order", - "base_type": "type/Date", - "semantic_type": null, - "has_field_values": "none", - "name_field": null, - "dimensions": [] - }, - "39": { - "id": 39, - "table_id": 7, - "display_name": "first_order", - "base_type": "type/Date", - "semantic_type": null, - "has_field_values": "none", - "name_field": null, - "dimensions": [] - } - }, - "last-edit-info": { - "id": 1, - "email": "user@example.com", - "first_name": "dbtmetabase", - "last_name": "", - "timestamp": "2021-07-21T08:01:39.542335Z" - }, - "parameters": [ - { - "id": "-1693594175", - "type": "date/all-options", - "name": "most_recent_order", - "slug": "most_recent_order" - }, - { - "id": "381527929", - "type": "date/all-options", - "name": "first_order", - "slug": "first_order" - } - ], - "created_at": "2021-07-21T08:01:37.328519Z", - "public_uuid": null, - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/dashboard/2.json b/tests/fixtures/api/dashboard/2.json new file mode 100644 index 0000000..3a2f87c --- /dev/null +++ b/tests/fixtures/api/dashboard/2.json @@ -0,0 +1,1396 @@ +{ + "description": "Dashboard is a dashboard is a dashboard", + "archived": false, + "view_count": 96, + "collection_position": null, + "dashcards": [ + { + "size_x": 12, + "dashboard_tab_id": null, + "series": [], + "action_id": null, + "collection_authority_level": null, + "card": { + "cache_invalidated_at": null, + "description": "Orders and customers", + "archived": false, + "view_count": 360, + "collection_position": null, + "table_id": 10, + "can_run_adhoc_query": true, + "result_metadata": [ + { + "description": "This is a unique identifier for an order", + "semantic_type": "type/PK", + "coercion_strategy": null, + "name": "order_id", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 84, + null + ], + "effective_type": "type/Integer", + "id": 84, + "visibility_type": "normal", + "display_name": "Order ID", + "fingerprint": { + "global": { + "distinct-count": 99, + "nil%": 0.0 + }, + "type": { + "type/Number": { + "min": 1.0, + "q1": 25.25, + "q3": 74.75, + "max": 99.0, + "sd": 28.719704534890823, + "avg": 50.0 + } + } + }, + "base_type": "type/Integer" + }, + { + "description": "Foreign key to the customers table", + "semantic_type": "type/FK", + "coercion_strategy": null, + "name": "customer_id", + "settings": null, + "fk_target_field_id": 94, + "field_ref": [ + "field", + 79, + null + ], + "effective_type": "type/Integer", + "id": 79, + "visibility_type": "normal", + "display_name": "Customer ID", + "fingerprint": { + "global": { + "distinct-count": 62, + "nil%": 0.0 + }, + "type": { + "type/Number": { + "min": 1.0, + "q1": 25.875, + "q3": 69.625, + "max": 99.0, + "sd": 27.781341350472964, + "avg": 48.25252525252525 + } + } + }, + "base_type": "type/Integer" + }, + { + "description": "Date (UTC) that the order was placed", + "semantic_type": null, + "coercion_strategy": null, + "unit": "default", + "name": "order_date", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 82, + { + "temporal-unit": "default" + } + ], + "effective_type": "type/Date", + "id": 82, + "visibility_type": "normal", + "display_name": "Order Date", + "fingerprint": { + "global": { + "distinct-count": 69, + "nil%": 0.0 + }, + "type": { + "type/DateTime": { + "earliest": "2018-01-01", + "latest": "2018-04-09" + } + } + }, + "base_type": "type/Date" + }, + { + "description": null, + "semantic_type": "type/Category", + "coercion_strategy": null, + "name": "status", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 78, + null + ], + "effective_type": "type/Text", + "id": 78, + "visibility_type": "normal", + "display_name": "Status", + "fingerprint": { + "global": { + "distinct-count": 5, + "nil%": 0.0 + }, + "type": { + "type/Text": { + "percent-json": 0.0, + "percent-url": 0.0, + "percent-email": 0.0, + "percent-state": 0.0, + "average-length": 8.404040404040405 + } + } + }, + "base_type": "type/Text" + }, + { + "description": "Total amount (AUD) of the order", + "semantic_type": null, + "coercion_strategy": null, + "name": "amount", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 83, + null + ], + "effective_type": "type/BigInteger", + "id": 83, + "visibility_type": "normal", + "display_name": "Amount", + "fingerprint": { + "global": { + "distinct-count": 32, + "nil%": 0.0 + }, + "type": { + "type/Number": { + "min": 0.0, + "q1": 8.202945002812456, + "q3": 24.26138721247417, + "max": 58.0, + "sd": 10.736062525374601, + "avg": 16.88888888888889 + } + } + }, + "base_type": "type/BigInteger" + }, + { + "description": "Amount of the order (AUD) paid for by credit card", + "semantic_type": "type/Category", + "coercion_strategy": null, + "name": "credit_card_amount", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 81, + null + ], + "effective_type": "type/BigInteger", + "id": 81, + "visibility_type": "normal", + "display_name": "Credit Card Amount", + "fingerprint": { + "global": { + "distinct-count": 25, + "nil%": 0.0 + }, + "type": { + "type/Number": { + "min": 0.0, + "q1": 0.0, + "q3": 18.797054997187544, + "max": 30.0, + "sd": 10.959088854927673, + "avg": 8.797979797979798 + } + } + }, + "base_type": "type/BigInteger" + }, + { + "description": "Amount of the order (AUD) paid for by coupon", + "semantic_type": "type/Category", + "coercion_strategy": null, + "name": "coupon_amount", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 76, + null + ], + "effective_type": "type/BigInteger", + "id": 76, + "visibility_type": "normal", + "display_name": "Coupon Amount", + "fingerprint": { + "global": { + "distinct-count": 12, + "nil%": 0.0 + }, + "type": { + "type/Number": { + "min": 0.0, + "q1": 0.0, + "q3": 0.4747603274810728, + "max": 26.0, + "sd": 5.955012405351229, + "avg": 1.8686868686868687 + } + } + }, + "base_type": "type/BigInteger" + }, + { + "description": "Amount of the order (AUD) paid for by bank transfer", + "semantic_type": "type/Category", + "coercion_strategy": null, + "name": "bank_transfer_amount", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 77, + null + ], + "effective_type": "type/BigInteger", + "id": 77, + "visibility_type": "normal", + "display_name": "Bank Transfer Amount", + "fingerprint": { + "global": { + "distinct-count": 19, + "nil%": 0.0 + }, + "type": { + "type/Number": { + "min": 0.0, + "q1": 0.0, + "q3": 4.75, + "max": 26.0, + "sd": 7.420825132023675, + "avg": 4.151515151515151 + } + } + }, + "base_type": "type/BigInteger" + }, + { + "description": "Amount of the order (AUD) paid for by gift card", + "semantic_type": "type/Category", + "coercion_strategy": null, + "name": "gift_card_amount", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 80, + null + ], + "effective_type": "type/BigInteger", + "id": 80, + "visibility_type": "normal", + "display_name": "Gift Card Amount", + "fingerprint": { + "global": { + "distinct-count": 11, + "nil%": 0.0 + }, + "type": { + "type/Number": { + "min": 0.0, + "q1": 0.0, + "q3": 1.3692088763283736, + "max": 30.0, + "sd": 6.392362351566517, + "avg": 2.0707070707070705 + } + } + }, + "base_type": "type/BigInteger" + }, + { + "description": "This is a unique identifier for a customer", + "semantic_type": "type/PK", + "coercion_strategy": null, + "name": "customer_id_2", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 94, + { + "join-alias": "Customers" + } + ], + "effective_type": "type/Integer", + "id": 94, + "visibility_type": "normal", + "display_name": "Customers \u2192 Customer ID", + "fingerprint": { + "global": { + "distinct-count": 100, + "nil%": 0.0 + }, + "type": { + "type/Number": { + "min": 1.0, + "q1": 25.5, + "q3": 75.5, + "max": 100.0, + "sd": 29.008358252146028, + "avg": 50.5 + } + } + }, + "base_type": "type/Integer" + }, + { + "description": "Customer's first name. PII.", + "semantic_type": "type/Name", + "coercion_strategy": null, + "name": "first_name", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 91, + { + "join-alias": "Customers" + } + ], + "effective_type": "type/Text", + "id": 91, + "visibility_type": "normal", + "display_name": "Customers \u2192 First Name", + "fingerprint": { + "global": { + "distinct-count": 79, + "nil%": 0.0 + }, + "type": { + "type/Text": { + "percent-json": 0.0, + "percent-url": 0.0, + "percent-email": 0.0, + "percent-state": 0.02, + "average-length": 5.86 + } + } + }, + "base_type": "type/Text" + }, + { + "description": "Customer's last name. PII.", + "semantic_type": "type/Name", + "coercion_strategy": null, + "name": "last_name", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 90, + { + "join-alias": "Customers" + } + ], + "effective_type": "type/Text", + "id": 90, + "visibility_type": "normal", + "display_name": "Customers \u2192 Last Name", + "fingerprint": { + "global": { + "distinct-count": 19, + "nil%": 0.0 + }, + "type": { + "type/Text": { + "percent-json": 0.0, + "percent-url": 0.0, + "percent-email": 0.0, + "percent-state": 0.0, + "average-length": 2.0 + } + } + }, + "base_type": "type/Text" + }, + { + "description": "Date (UTC) of a customer's first order", + "semantic_type": null, + "coercion_strategy": null, + "unit": "default", + "name": "first_order", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 95, + { + "temporal-unit": "default", + "join-alias": "Customers" + } + ], + "effective_type": "type/Date", + "id": 95, + "visibility_type": "normal", + "display_name": "Customers \u2192 First Order", + "fingerprint": { + "global": { + "distinct-count": 47, + "nil%": 0.38 + }, + "type": { + "type/DateTime": { + "earliest": "2018-01-01", + "latest": "2018-04-07" + } + } + }, + "base_type": "type/Date" + }, + { + "description": "Date (UTC) of a customer's most recent order", + "semantic_type": null, + "coercion_strategy": null, + "unit": "default", + "name": "most_recent_order", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 92, + { + "temporal-unit": "default", + "join-alias": "Customers" + } + ], + "effective_type": "type/Date", + "id": 92, + "visibility_type": "normal", + "display_name": "Customers \u2192 Most Recent Order", + "fingerprint": { + "global": { + "distinct-count": 53, + "nil%": 0.38 + }, + "type": { + "type/DateTime": { + "earliest": "2018-01-09", + "latest": "2018-04-09" + } + } + }, + "base_type": "type/Date" + }, + { + "description": "Count of the number of orders a customer has placed", + "semantic_type": "type/Quantity", + "coercion_strategy": null, + "name": "number_of_orders", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 89, + { + "join-alias": "Customers" + } + ], + "effective_type": "type/BigInteger", + "id": 89, + "visibility_type": "normal", + "display_name": "Customers \u2192 order_count", + "fingerprint": { + "global": { + "distinct-count": 5, + "nil%": 0.38 + }, + "type": { + "type/Number": { + "min": 1.0, + "q1": 1.0, + "q3": 2.0901356485315583, + "max": 5.0, + "sd": 0.7779687173818424, + "avg": 1.596774193548387 + } + } + }, + "base_type": "type/BigInteger" + }, + { + "description": "Total value (AUD) of a customer's orders", + "semantic_type": null, + "coercion_strategy": null, + "name": "customer_lifetime_value", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 93, + { + "join-alias": "Customers" + } + ], + "effective_type": "type/BigInteger", + "id": 93, + "visibility_type": "normal", + "display_name": "Customers \u2192 Customer Lifetime Value", + "fingerprint": { + "global": { + "distinct-count": 36, + "nil%": 0.38 + }, + "type": { + "type/Number": { + "min": 1.0, + "q1": 13.464101615137753, + "q3": 35.46410161513776, + "max": 99.0, + "sd": 18.812245525263663, + "avg": 26.967741935483872 + } + } + }, + "base_type": "type/BigInteger" + } + ], + "initially_published_at": null, + "can_write": true, + "database_id": 2, + "enable_embedding": false, + "collection_id": null, + "query_type": "query", + "name": "Orders + Customers", + "last_used_at": "2024-06-20T05:55:59.079272Z", + "type": "question", + "query_average_duration": 72, + "creator_id": 1, + "moderation_reviews": [], + "updated_at": "2024-06-20T05:55:59.117538Z", + "made_public_by_id": null, + "embedding_params": null, + "cache_ttl": null, + "dataset_query": { + "database": 2, + "type": "query", + "query": { + "source-table": 10, + "joins": [ + { + "fields": "all", + "alias": "Customers", + "condition": [ + "=", + [ + "field", + 79, + { + "base-type": "type/Integer" + } + ], + [ + "field", + 94, + { + "base-type": "type/Integer", + "join-alias": "Customers" + } + ] + ], + "source-table": 12 + } + ] + } + }, + "id": 27, + "parameter_mappings": [], + "display": "table", + "entity_id": "WWI6bOVB-ssXYgCHASj9E", + "collection_preview": true, + "visualization_settings": { + "table.pivot_column": "number_of_orders", + "table.cell_column": "order_id" + }, + "metabase_version": "v0.50.5 (48f6978)", + "parameters": [], + "created_at": "2024-06-19T11:57:35.85999Z", + "public_uuid": null + }, + "updated_at": "2024-06-19T11:57:59.706516Z", + "col": 0, + "id": 32, + "parameter_mappings": [], + "card_id": 27, + "entity_id": "t8WO08wff6s6mQEeClbMU", + "visualization_settings": {}, + "size_y": 9, + "dashboard_id": 2, + "created_at": "2024-06-19T11:57:59.706516Z", + "row": 0 + }, + { + "size_x": 12, + "dashboard_tab_id": null, + "series": [], + "action_id": null, + "collection_authority_level": null, + "card": { + "cache_invalidated_at": null, + "description": null, + "archived": false, + "view_count": 180, + "collection_position": null, + "table_id": 10, + "can_run_adhoc_query": true, + "result_metadata": [ + { + "description": null, + "semantic_type": null, + "coercion_strategy": null, + "name": "order_id", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 84, + null + ], + "effective_type": "type/Integer", + "id": 84, + "visibility_type": "normal", + "display_name": "Order ID", + "fingerprint": { + "global": { + "distinct-count": 99, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 1, + "q1": 25.25, + "q3": 74.75, + "max": 99, + "sd": 28.719704534890823, + "avg": 50 + } + } + }, + "base_type": "type/Integer" + }, + { + "description": null, + "semantic_type": null, + "coercion_strategy": null, + "name": "customer_id", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 79, + null + ], + "effective_type": "type/Integer", + "id": 79, + "visibility_type": "normal", + "display_name": "Customer ID", + "fingerprint": { + "global": { + "distinct-count": 62, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 1, + "q1": 25.875, + "q3": 69.625, + "max": 99, + "sd": 27.781341350472964, + "avg": 48.25252525252525 + } + } + }, + "base_type": "type/Integer" + }, + { + "description": null, + "semantic_type": null, + "coercion_strategy": null, + "unit": "default", + "name": "order_date", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 82, + { + "temporal-unit": "default" + } + ], + "effective_type": "type/Date", + "id": 82, + "visibility_type": "normal", + "display_name": "Order Date", + "fingerprint": { + "global": { + "distinct-count": 69, + "nil%": 0 + }, + "type": { + "type/DateTime": { + "earliest": "2018-01-01", + "latest": "2018-04-09" + } + } + }, + "base_type": "type/Date" + }, + { + "description": null, + "semantic_type": "type/Category", + "coercion_strategy": null, + "name": "status", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 78, + null + ], + "effective_type": "type/Text", + "id": 78, + "visibility_type": "normal", + "display_name": "Status", + "fingerprint": { + "global": { + "distinct-count": 5, + "nil%": 0 + }, + "type": { + "type/Text": { + "percent-json": 0, + "percent-url": 0, + "percent-email": 0, + "percent-state": 0, + "average-length": 8.404040404040405 + } + } + }, + "base_type": "type/Text" + }, + { + "description": null, + "semantic_type": "type/Category", + "coercion_strategy": null, + "name": "credit_card_amount", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 81, + null + ], + "effective_type": "type/BigInteger", + "id": 81, + "visibility_type": "normal", + "display_name": "Credit Card Amount", + "fingerprint": { + "global": { + "distinct-count": 25, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 0, + "q1": 0, + "q3": 18.797054997187544, + "max": 30, + "sd": 10.959088854927673, + "avg": 8.797979797979798 + } + } + }, + "base_type": "type/BigInteger" + }, + { + "description": null, + "semantic_type": "type/Category", + "coercion_strategy": null, + "name": "coupon_amount", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 76, + null + ], + "effective_type": "type/BigInteger", + "id": 76, + "visibility_type": "normal", + "display_name": "Coupon Amount", + "fingerprint": { + "global": { + "distinct-count": 12, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 0, + "q1": 0, + "q3": 0.4747603274810728, + "max": 26, + "sd": 5.955012405351229, + "avg": 1.8686868686868687 + } + } + }, + "base_type": "type/BigInteger" + }, + { + "description": null, + "semantic_type": "type/Category", + "coercion_strategy": null, + "name": "bank_transfer_amount", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 77, + null + ], + "effective_type": "type/BigInteger", + "id": 77, + "visibility_type": "normal", + "display_name": "Bank Transfer Amount", + "fingerprint": { + "global": { + "distinct-count": 19, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 0, + "q1": 0, + "q3": 4.75, + "max": 26, + "sd": 7.420825132023675, + "avg": 4.151515151515151 + } + } + }, + "base_type": "type/BigInteger" + }, + { + "description": null, + "semantic_type": "type/Category", + "coercion_strategy": null, + "name": "gift_card_amount", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 80, + null + ], + "effective_type": "type/BigInteger", + "id": 80, + "visibility_type": "normal", + "display_name": "Gift Card Amount", + "fingerprint": { + "global": { + "distinct-count": 11, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 0, + "q1": 0, + "q3": 1.3692088763283736, + "max": 30, + "sd": 6.392362351566517, + "avg": 2.0707070707070705 + } + } + }, + "base_type": "type/BigInteger" + }, + { + "description": null, + "semantic_type": null, + "coercion_strategy": null, + "name": "amount", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 83, + null + ], + "effective_type": "type/BigInteger", + "id": 83, + "visibility_type": "normal", + "display_name": "Amount", + "fingerprint": { + "global": { + "distinct-count": 32, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 0, + "q1": 8.202945002812456, + "q3": 24.26138721247417, + "max": 58, + "sd": 10.736062525374601, + "avg": 16.88888888888889 + } + } + }, + "base_type": "type/BigInteger" + }, + { + "description": null, + "semantic_type": null, + "coercion_strategy": null, + "name": "customer_id_2", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 94, + null + ], + "effective_type": "type/Integer", + "id": 94, + "visibility_type": "normal", + "display_name": "Customers \u2192 Customer ID", + "fingerprint": { + "global": { + "distinct-count": 100, + "nil%": 0 + }, + "type": { + "type/Number": { + "min": 1, + "q1": 25.5, + "q3": 75.5, + "max": 100, + "sd": 29.008358252146028, + "avg": 50.5 + } + } + }, + "base_type": "type/Integer" + }, + { + "description": null, + "semantic_type": "type/Name", + "coercion_strategy": null, + "name": "first_name", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 91, + null + ], + "effective_type": "type/Text", + "id": 91, + "visibility_type": "normal", + "display_name": "Customers \u2192 First Name", + "fingerprint": { + "global": { + "distinct-count": 79, + "nil%": 0 + }, + "type": { + "type/Text": { + "percent-json": 0, + "percent-url": 0, + "percent-email": 0, + "percent-state": 0.02, + "average-length": 5.86 + } + } + }, + "base_type": "type/Text" + }, + { + "description": null, + "semantic_type": "type/Name", + "coercion_strategy": null, + "name": "last_name", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 90, + null + ], + "effective_type": "type/Text", + "id": 90, + "visibility_type": "normal", + "display_name": "Customers \u2192 Last Name", + "fingerprint": { + "global": { + "distinct-count": 19, + "nil%": 0 + }, + "type": { + "type/Text": { + "percent-json": 0, + "percent-url": 0, + "percent-email": 0, + "percent-state": 0, + "average-length": 2 + } + } + }, + "base_type": "type/Text" + }, + { + "description": null, + "semantic_type": null, + "coercion_strategy": null, + "unit": "default", + "name": "first_order", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 95, + { + "temporal-unit": "default" + } + ], + "effective_type": "type/Date", + "id": 95, + "visibility_type": "normal", + "display_name": "Customers \u2192 First Order", + "fingerprint": { + "global": { + "distinct-count": 47, + "nil%": 0.38 + }, + "type": { + "type/DateTime": { + "earliest": "2018-01-01", + "latest": "2018-04-07" + } + } + }, + "base_type": "type/Date" + }, + { + "description": null, + "semantic_type": null, + "coercion_strategy": null, + "unit": "default", + "name": "most_recent_order", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 92, + { + "temporal-unit": "default" + } + ], + "effective_type": "type/Date", + "id": 92, + "visibility_type": "normal", + "display_name": "Customers \u2192 Most Recent Order", + "fingerprint": { + "global": { + "distinct-count": 53, + "nil%": 0.38 + }, + "type": { + "type/DateTime": { + "earliest": "2018-01-09", + "latest": "2018-04-09" + } + } + }, + "base_type": "type/Date" + }, + { + "description": null, + "semantic_type": "type/Quantity", + "coercion_strategy": null, + "name": "number_of_orders", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 89, + null + ], + "effective_type": "type/BigInteger", + "id": 89, + "visibility_type": "normal", + "display_name": "Customers \u2192 Number Of Orders", + "fingerprint": { + "global": { + "distinct-count": 5, + "nil%": 0.38 + }, + "type": { + "type/Number": { + "min": 1, + "q1": 1, + "q3": 2.0901356485315583, + "max": 5, + "sd": 0.7779687173818424, + "avg": 1.596774193548387 + } + } + }, + "base_type": "type/BigInteger" + }, + { + "description": null, + "semantic_type": null, + "coercion_strategy": null, + "name": "customer_lifetime_value", + "settings": null, + "fk_target_field_id": null, + "field_ref": [ + "field", + 93, + null + ], + "effective_type": "type/BigInteger", + "id": 93, + "visibility_type": "normal", + "display_name": "Customers \u2192 Customer Lifetime Value", + "fingerprint": { + "global": { + "distinct-count": 36, + "nil%": 0.38 + }, + "type": { + "type/Number": { + "min": 1, + "q1": 13.464101615137753, + "q3": 35.46410161513776, + "max": 99, + "sd": 18.812245525263663, + "avg": 26.967741935483872 + } + } + }, + "base_type": "type/BigInteger" + } + ], + "initially_published_at": null, + "can_write": true, + "database_id": 2, + "enable_embedding": false, + "collection_id": null, + "query_type": "query", + "name": "Orders + Customers, Filtered by Status is completed", + "last_used_at": "2024-06-19T12:09:31.689381Z", + "type": "question", + "query_average_duration": 129, + "creator_id": 1, + "moderation_reviews": [], + "updated_at": "2024-06-19T12:09:31.689381Z", + "made_public_by_id": null, + "embedding_params": null, + "cache_ttl": null, + "dataset_query": { + "database": 2, + "type": "query", + "query": { + "source-table": "card__27", + "filter": [ + "=", + [ + "field", + 78, + { + "base-type": "type/Text" + } + ], + "completed" + ] + } + }, + "id": 28, + "parameter_mappings": [], + "display": "table", + "entity_id": "ewUj6ow4HD_vePKnXihVA", + "collection_preview": true, + "visualization_settings": { + "table.pivot_column": "status", + "table.cell_column": "order_id" + }, + "metabase_version": "v0.50.5 (48f6978)", + "parameters": [], + "created_at": "2024-06-19T11:58:35.060527Z", + "public_uuid": null + }, + "updated_at": "2024-06-19T11:59:02.788755Z", + "col": 12, + "id": 33, + "parameter_mappings": [], + "card_id": 28, + "entity_id": "T-MQs-NmBE2RvDxzilbfy", + "visualization_settings": {}, + "size_y": 9, + "dashboard_id": 2, + "created_at": "2024-06-19T11:59:02.788755Z", + "row": 0 + }, + { + "size_x": 6, + "dashboard_tab_id": null, + "series": [], + "action_id": null, + "collection_authority_level": null, + "card": { + "cache_invalidated_at": null, + "description": null, + "archived": false, + "view_count": 179, + "collection_position": null, + "table_id": null, + "can_run_adhoc_query": true, + "result_metadata": [ + { + "display_name": "count", + "field_ref": [ + "field", + "count", + { + "base-type": "type/BigInteger" + } + ], + "name": "count", + "base_type": "type/BigInteger", + "effective_type": "type/BigInteger", + "semantic_type": "type/Quantity", + "fingerprint": { + "global": { + "distinct-count": 1, + "nil%": 0.0 + }, + "type": { + "type/Number": { + "min": 5.0, + "q1": 5.0, + "q3": 5.0, + "max": 5.0, + "sd": null, + "avg": 5.0 + } + } + } + } + ], + "initially_published_at": null, + "can_write": true, + "database_id": 2, + "enable_embedding": false, + "collection_id": null, + "query_type": "native", + "name": "Returned Order Count SQL", + "last_used_at": "2024-06-19T12:09:31.486489Z", + "type": "question", + "query_average_duration": 10, + "creator_id": 1, + "moderation_reviews": [], + "updated_at": "2024-06-19T12:09:31.507473Z", + "made_public_by_id": null, + "embedding_params": null, + "cache_ttl": null, + "dataset_query": { + "database": 2, + "type": "native", + "native": { + "template-tags": {}, + "query": "select\n count(*)\nfrom STG_payments as p\n left join STG_orders as o on p.order_id = o.order_id\nwhere o.status = 'returned'\n;" + } + }, + "id": 29, + "parameter_mappings": [], + "display": "scalar", + "entity_id": "iCEt78jHFFT1fqTa28FOB", + "collection_preview": true, + "visualization_settings": {}, + "metabase_version": "v0.50.5 (48f6978)", + "parameters": [], + "created_at": "2024-06-19T12:03:01.905927Z", + "public_uuid": null + }, + "updated_at": "2024-06-19T12:03:09.615782Z", + "col": 0, + "id": 34, + "parameter_mappings": [], + "card_id": 29, + "entity_id": "UXRKboD_8GJ4FwKULLjkm", + "visualization_settings": {}, + "size_y": 3, + "dashboard_id": 2, + "created_at": "2024-06-19T12:03:09.615782Z", + "row": 9 + } + ], + "param_values": null, + "initially_published_at": null, + "can_write": true, + "tabs": [], + "enable_embedding": false, + "collection_id": null, + "show_in_getting_started": false, + "name": "The Dashboard", + "width": "fixed", + "caveats": null, + "collection_authority_level": null, + "creator_id": 1, + "updated_at": "2024-06-19T12:03:22.492116Z", + "made_public_by_id": null, + "embedding_params": null, + "cache_ttl": null, + "last_used_param_values": {}, + "id": 2, + "position": null, + "entity_id": "tAP447G_z1qHPtZeJkc2J", + "param_fields": null, + "last-edit-info": { + "id": 1, + "email": "dbtmetabase@example.com", + "first_name": "dbtmetabase", + "last_name": null, + "timestamp": "2024-06-19T12:03:22.501237Z" + }, + "collection": { + "metabase.models.collection.root/is-root?": true, + "authority_level": null, + "name": "Our analytics", + "is_personal": false, + "id": "root", + "can_write": true + }, + "parameters": [], + "auto_apply_filters": true, + "created_at": "2024-06-19T11:57:43.675681Z", + "public_uuid": null, + "points_of_interest": null +} \ No newline at end of file diff --git a/tests/fixtures/api/database.json b/tests/fixtures/api/database.json index e733767..d66d6b8 100644 --- a/tests/fixtures/api/database.json +++ b/tests/fixtures/api/database.json @@ -1,51 +1,88 @@ [ { + "uploads_schema_name": null, "description": null, "features": [ + "index-info", "full-join", + "window-functions/cumulative", "basic-aggregations", + "temporal-extract", + "actions/custom", + "window-functions/offset", + "now", + "convert-timezone", + "nested-field-columns", "standard-deviation-aggregations", + "test/jvm-timezone-setting", + "date-arithmetics", + "persist-models", + "actions", "expression-aggregations", "percentile-aggregations", + "connection-impersonation", "foreign-keys", + "table-privileges", "right-join", "left-join", "native-parameters", + "schemas", "nested-queries", "expressions", + "uploads", "set-timezone", "regex", "case-sensitivity-string-filter-options", "binning", + "metadata/key-constraints", + "datetime-diff", + "upload-with-auto-pk", "inner-join", - "advanced-math-expressions" + "advanced-math-expressions", + "fingerprint" ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", + "uploads_table_prefix": null, + "cache_field_values_schedule": "0 0 5 * * ? *", + "timezone": "Etc/UTC", "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", + "metadata_sync_schedule": "0 11 * * * ? *", + "name": "dbtmetabase", + "settings": null, "caveats": null, + "creator_id": 1, "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", + "updated_at": "2024-06-20T05:33:42.131951Z", "native_permissions": "write", + "cache_ttl": null, "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", "ssl": false, - "additional-options": null, - "tunnel-enabled": false + "password": "**MetabasePass**", + "port": 5432, + "advanced-options": false, + "schema-filters-type": "all", + "dbname": "dbtmetabase", + "host": "postgres", + "tunnel-enabled": false, + "user": "dbtmetabase" }, "is_sample": false, "id": 2, "is_on_demand": false, - "options": null, "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null + "initial_sync_status": "complete", + "is_audit": false, + "dbms_version": { + "flavor": "PostgreSQL", + "version": "16.1 (Debian 16.1-1.pgdg120+1)", + "semantic-version": [ + 16, + 1 + ] + }, + "uploads_enabled": false, + "refingerprint": false, + "created_at": "2024-06-19T11:49:38.313316Z", + "points_of_interest": null, + "can_upload": false } ] \ No newline at end of file diff --git a/tests/fixtures/api/database/2.json b/tests/fixtures/api/database/2.json deleted file mode 100644 index 95c2c8d..0000000 --- a/tests/fixtures/api/database/2.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "schedules": { - "cache_field_values": { - "schedule_minute": 0, - "schedule_day": null, - "schedule_frame": null, - "schedule_hour": 22, - "schedule_type": "daily" - }, - "metadata_sync": { - "schedule_minute": 46, - "schedule_day": null, - "schedule_frame": null, - "schedule_hour": null, - "schedule_type": "hourly" - } - }, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/database/2/metadata.json b/tests/fixtures/api/database/2/metadata.json index 269f033..c22daed 100644 --- a/tests/fixtures/api/database/2/metadata.json +++ b/tests/fixtures/api/database/2/metadata.json @@ -1,63 +1,94 @@ { + "uploads_schema_name": null, "description": null, "features": [ + "index-info", "full-join", + "window-functions/cumulative", "basic-aggregations", + "temporal-extract", + "actions/custom", + "window-functions/offset", + "now", + "convert-timezone", + "nested-field-columns", "standard-deviation-aggregations", + "test/jvm-timezone-setting", + "date-arithmetics", + "persist-models", + "actions", "expression-aggregations", "percentile-aggregations", + "connection-impersonation", "foreign-keys", + "table-privileges", "right-join", "left-join", "native-parameters", + "schemas", "nested-queries", "expressions", + "uploads", "set-timezone", "regex", "case-sensitivity-string-filter-options", "binning", + "metadata/key-constraints", + "datetime-diff", + "upload-with-auto-pk", "inner-join", - "advanced-math-expressions" + "advanced-math-expressions", + "fingerprint" ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", + "uploads_table_prefix": null, + "cache_field_values_schedule": "0 0 5 * * ? *", + "timezone": "Etc/UTC", "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", + "metadata_sync_schedule": "0 11 * * * ? *", + "name": "dbtmetabase", + "settings": null, "caveats": null, "tables": [ { - "description": null, + "description": "This table has basic information about a customer, as well as some derived facts based on a customer's orders", "entity_type": "entity/GenericTable", + "view_count": 2, "schema": "public", + "database_require_filter": null, "show_in_getting_started": false, "name": "customers", "fields": [ { - "description": null, + "description": "This is a unique identifier for a customer", "database_type": "int4", - "semantic_type": null, - "table_id": 7, + "semantic_type": "type/PK", + "table_id": 12, "coercion_strategy": null, + "database_indexed": null, "name": "customer_id", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.194597Z", + "updated_at": "2024-06-20T05:41:57.903724Z", "custom_position": 0, "effective_type": "type/Integer", "active": true, + "nfc_path": null, "parent_id": null, - "id": 38, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 94, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 0, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "customer_id", + "display_name": "Customer ID", "database_position": 0, + "database_required": false, "fingerprint": { "global": { "distinct-count": 100, @@ -74,35 +105,41 @@ } } }, - "created_at": "2021-07-21T05:47:53.408064Z", + "created_at": "2024-06-19T11:49:38.804953Z", "base_type": "type/Integer", "points_of_interest": null }, { - "description": null, + "description": "Customer's first name. PII.", "database_type": "text", "semantic_type": "type/Name", - "table_id": 7, + "table_id": 12, "coercion_strategy": null, + "database_indexed": null, "name": "first_name", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.242305Z", - "custom_position": 0, + "updated_at": "2024-06-20T05:41:57.905659Z", + "custom_position": 1, "effective_type": "type/Text", "active": true, + "nfc_path": null, "parent_id": null, - "id": 37, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 91, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 1, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "first_name", + "display_name": "First Name", "database_position": 1, + "database_required": false, "fingerprint": { "global": { "distinct-count": 79, @@ -118,35 +155,41 @@ } } }, - "created_at": "2021-07-21T05:47:53.404944Z", + "created_at": "2024-06-19T11:49:38.804953Z", "base_type": "type/Text", "points_of_interest": null }, { - "description": null, + "description": "Customer's last name. PII.", "database_type": "text", "semantic_type": "type/Name", - "table_id": 7, + "table_id": 12, "coercion_strategy": null, + "database_indexed": null, "name": "last_name", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.249828Z", - "custom_position": 0, + "updated_at": "2024-06-20T05:41:57.90759Z", + "custom_position": 2, "effective_type": "type/Text", "active": true, + "nfc_path": null, "parent_id": null, - "id": 43, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 90, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 2, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "last_name", + "display_name": "Last Name", "database_position": 2, + "database_required": false, "fingerprint": { "global": { "distinct-count": 19, @@ -162,35 +205,41 @@ } } }, - "created_at": "2021-07-21T05:47:53.419931Z", + "created_at": "2024-06-19T11:49:38.804953Z", "base_type": "type/Text", "points_of_interest": null }, { - "description": null, + "description": "Date (UTC) of a customer's first order", "database_type": "date", "semantic_type": null, - "table_id": 7, + "table_id": 12, "coercion_strategy": null, + "database_indexed": null, "name": "first_order", "fingerprint_version": 5, "has_field_values": "none", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.232032Z", - "custom_position": 0, + "updated_at": "2024-06-20T05:41:57.908907Z", + "custom_position": 3, "effective_type": "type/Date", "active": true, + "nfc_path": null, "parent_id": null, - "id": 39, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 95, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 3, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "first_order", + "display_name": "First Order", "database_position": 3, + "database_required": false, "fingerprint": { "global": { "distinct-count": 47, @@ -203,35 +252,41 @@ } } }, - "created_at": "2021-07-21T05:47:53.410556Z", + "created_at": "2024-06-19T11:49:38.804953Z", "base_type": "type/Date", "points_of_interest": null }, { - "description": null, + "description": "Date (UTC) of a customer's most recent order", "database_type": "date", "semantic_type": null, - "table_id": 7, + "table_id": 12, "coercion_strategy": null, + "database_indexed": null, "name": "most_recent_order", "fingerprint_version": 5, "has_field_values": "none", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.186143Z", - "custom_position": 0, + "updated_at": "2024-06-20T05:41:57.909899Z", + "custom_position": 4, "effective_type": "type/Date", "active": true, + "nfc_path": null, "parent_id": null, - "id": 42, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 92, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 4, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "most_recent_order", + "display_name": "Most Recent Order", "database_position": 4, + "database_required": false, "fingerprint": { "global": { "distinct-count": 53, @@ -244,35 +299,41 @@ } } }, - "created_at": "2021-07-21T05:47:53.417127Z", + "created_at": "2024-06-19T11:49:38.804953Z", "base_type": "type/Date", "points_of_interest": null }, { - "description": null, + "description": "Count of the number of orders a customer has placed", "database_type": "int8", - "semantic_type": "type/Quantity", - "table_id": 7, + "semantic_type": null, + "table_id": 12, "coercion_strategy": null, + "database_indexed": null, "name": "number_of_orders", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.197576Z", - "custom_position": 0, + "updated_at": "2024-06-20T05:41:57.911909Z", + "custom_position": 5, "effective_type": "type/BigInteger", "active": true, + "nfc_path": null, "parent_id": null, - "id": 40, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 89, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 5, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "number_of_orders", + "display_name": "order_count", "database_position": 5, + "database_required": false, "fingerprint": { "global": { "distinct-count": 5, @@ -289,35 +350,41 @@ } } }, - "created_at": "2021-07-21T05:47:53.412376Z", + "created_at": "2024-06-19T11:49:38.804953Z", "base_type": "type/BigInteger", "points_of_interest": null }, { - "description": null, + "description": "Total value (AUD) of a customer's orders", "database_type": "int8", "semantic_type": null, - "table_id": 7, + "table_id": 12, "coercion_strategy": null, + "database_indexed": null, "name": "customer_lifetime_value", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.288463Z", - "custom_position": 0, + "updated_at": "2024-06-20T05:41:57.913497Z", + "custom_position": 6, "effective_type": "type/BigInteger", "active": true, + "nfc_path": null, "parent_id": null, - "id": 41, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 93, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 6, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "customer_lifetime_value", + "display_name": "Customer Lifetime Value", "database_position": 6, + "database_required": false, "fingerprint": { "global": { "distinct-count": 36, @@ -334,57 +401,67 @@ } } }, - "created_at": "2021-07-21T05:47:53.414671Z", + "created_at": "2024-06-19T11:49:38.804953Z", "base_type": "type/BigInteger", "points_of_interest": null } ], "caveats": null, "segments": [], - "updated_at": "2021-07-21T07:30:35.159586Z", - "entity_name": null, + "updated_at": "2024-06-20T06:03:34.567961Z", "active": true, - "id": 7, + "id": 12, "db_id": 2, "visibility_type": null, - "field_order": "database", - "display_name": "customers", + "field_order": "custom", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "clients", "metrics": [], - "created_at": "2021-07-21T05:47:53.372467Z", + "created_at": "2024-06-19T11:49:38.617718Z", + "estimated_row_count": 100, "points_of_interest": null }, { - "description": null, + "description": "This table has basic information about orders, as well as some derived facts based on payments", "entity_type": "entity/TransactionTable", + "view_count": 1, "schema": "public", + "database_require_filter": null, "show_in_getting_started": false, "name": "orders", "fields": [ { - "description": null, + "description": "This is a unique identifier for an order", "database_type": "int4", - "semantic_type": null, - "table_id": 6, + "semantic_type": "type/PK", + "table_id": 10, "coercion_strategy": null, + "database_indexed": null, "name": "order_id", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.255223Z", + "updated_at": "2024-06-20T05:41:58.045181Z", "custom_position": 0, "effective_type": "type/Integer", "active": true, + "nfc_path": null, "parent_id": null, - "id": 47, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 84, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 0, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "order_id", + "display_name": "Order ID", "database_position": 0, + "database_required": false, "fingerprint": { "global": { "distinct-count": 99, @@ -401,35 +478,90 @@ } } }, - "created_at": "2021-07-21T05:47:53.444318Z", + "created_at": "2024-06-19T11:49:38.765377Z", "base_type": "type/Integer", "points_of_interest": null }, { - "description": null, + "description": "Foreign key to the customers table", "database_type": "int4", - "semantic_type": null, - "table_id": 6, + "semantic_type": "type/FK", + "table_id": 10, "coercion_strategy": null, + "database_indexed": null, "name": "customer_id", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, - "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.259928Z", - "custom_position": 0, + "fk_target_field_id": 94, + "updated_at": "2024-06-20T05:41:58.046428Z", + "custom_position": 1, "effective_type": "type/Integer", "active": true, + "nfc_path": null, "parent_id": null, - "id": 51, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 79, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 1, "visibility_type": "normal", - "target": null, + "target": { + "description": "This is a unique identifier for a customer", + "database_type": "int4", + "semantic_type": "type/PK", + "table_id": 12, + "coercion_strategy": null, + "database_indexed": null, + "name": "customer_id", + "fingerprint_version": 5, + "has_field_values": "list", + "settings": null, + "caveats": null, + "fk_target_field_id": null, + "updated_at": "2024-06-20T05:41:57.903724Z", + "custom_position": 0, + "effective_type": "type/Integer", + "active": true, + "nfc_path": null, + "parent_id": null, + "id": 94, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, + "position": 0, + "visibility_type": "normal", + "preview_display": true, + "display_name": "Customer ID", + "database_position": 0, + "database_required": false, + "fingerprint": { + "global": { + "distinct-count": 100, + "nil%": 0.0 + }, + "type": { + "type/Number": { + "min": 1.0, + "q1": 25.5, + "q3": 75.5, + "max": 100.0, + "sd": 29.008358252146028, + "avg": 50.5 + } + } + }, + "created_at": "2024-06-19T11:49:38.804953Z", + "base_type": "type/Integer", + "points_of_interest": null + }, "preview_display": true, - "display_name": "customer_id", + "display_name": "Customer ID", "database_position": 1, + "database_required": false, "fingerprint": { "global": { "distinct-count": 62, @@ -446,35 +578,41 @@ } } }, - "created_at": "2021-07-21T05:47:53.452739Z", + "created_at": "2024-06-19T11:49:38.765377Z", "base_type": "type/Integer", "points_of_interest": null }, { - "description": null, + "description": "Date (UTC) that the order was placed", "database_type": "date", "semantic_type": null, - "table_id": 6, + "table_id": 10, "coercion_strategy": null, + "database_indexed": null, "name": "order_date", "fingerprint_version": 5, "has_field_values": "none", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.188819Z", - "custom_position": 0, + "updated_at": "2024-06-20T05:41:58.048017Z", + "custom_position": 2, "effective_type": "type/Date", "active": true, + "nfc_path": null, "parent_id": null, - "id": 46, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 82, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 2, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "order_date", + "display_name": "Order Date", "database_position": 2, + "database_required": false, "fingerprint": { "global": { "distinct-count": 69, @@ -487,7 +625,7 @@ } } }, - "created_at": "2021-07-21T05:47:53.441254Z", + "created_at": "2024-06-19T11:49:38.765377Z", "base_type": "type/Date", "points_of_interest": null }, @@ -495,27 +633,33 @@ "description": null, "database_type": "text", "semantic_type": "type/Category", - "table_id": 6, + "table_id": 10, "coercion_strategy": null, + "database_indexed": null, "name": "status", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.203655Z", - "custom_position": 0, + "updated_at": "2024-06-20T05:41:58.049405Z", + "custom_position": 3, "effective_type": "type/Text", "active": true, + "nfc_path": null, "parent_id": null, - "id": 50, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 78, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 3, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "status", + "display_name": "Status", "database_position": 3, + "database_required": false, "fingerprint": { "global": { "distinct-count": 5, @@ -531,254 +675,288 @@ } } }, - "created_at": "2021-07-21T05:47:53.450839Z", + "created_at": "2024-06-19T11:49:38.765377Z", "base_type": "type/Text", "points_of_interest": null }, { - "description": null, + "description": "Total amount (AUD) of the order", "database_type": "int8", - "semantic_type": "type/Category", - "table_id": 6, + "semantic_type": null, + "table_id": 10, "coercion_strategy": null, - "name": "credit_card_amount", + "database_indexed": null, + "name": "amount", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.24496Z", - "custom_position": 0, + "updated_at": "2024-06-20T05:41:58.050561Z", + "custom_position": 4, "effective_type": "type/BigInteger", "active": true, + "nfc_path": null, "parent_id": null, - "id": 44, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 83, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 4, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "credit_card_amount", - "database_position": 4, + "display_name": "Amount", + "database_position": 8, + "database_required": false, "fingerprint": { "global": { - "distinct-count": 25, + "distinct-count": 32, "nil%": 0.0 }, "type": { "type/Number": { "min": 0.0, - "q1": 0.0, - "q3": 18.797054997187544, - "max": 30.0, - "sd": 10.959088854927673, - "avg": 8.797979797979798 + "q1": 8.202945002812456, + "q3": 24.26138721247417, + "max": 58.0, + "sd": 10.736062525374601, + "avg": 16.88888888888889 } } }, - "created_at": "2021-07-21T05:47:53.43752Z", + "created_at": "2024-06-19T11:49:38.765377Z", "base_type": "type/BigInteger", "points_of_interest": null }, { - "description": null, + "description": "Amount of the order (AUD) paid for by credit card", "database_type": "int8", "semantic_type": "type/Category", - "table_id": 6, + "table_id": 10, "coercion_strategy": null, - "name": "coupon_amount", + "database_indexed": null, + "name": "credit_card_amount", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.25752Z", - "custom_position": 0, + "updated_at": "2024-06-20T05:41:58.051915Z", + "custom_position": 5, "effective_type": "type/BigInteger", "active": true, + "nfc_path": null, "parent_id": null, - "id": 49, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 81, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 5, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "coupon_amount", - "database_position": 5, + "display_name": "Credit Card Amount", + "database_position": 4, + "database_required": false, "fingerprint": { "global": { - "distinct-count": 12, + "distinct-count": 25, "nil%": 0.0 }, "type": { "type/Number": { "min": 0.0, "q1": 0.0, - "q3": 0.4747603274810728, - "max": 26.0, - "sd": 5.955012405351229, - "avg": 1.8686868686868687 + "q3": 18.797054997187544, + "max": 30.0, + "sd": 10.959088854927673, + "avg": 8.797979797979798 } } }, - "created_at": "2021-07-21T05:47:53.448941Z", + "created_at": "2024-06-19T11:49:38.765377Z", "base_type": "type/BigInteger", "points_of_interest": null }, { - "description": null, + "description": "Amount of the order (AUD) paid for by coupon", "database_type": "int8", "semantic_type": "type/Category", - "table_id": 6, + "table_id": 10, "coercion_strategy": null, - "name": "bank_transfer_amount", + "database_indexed": null, + "name": "coupon_amount", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.25288Z", - "custom_position": 0, + "updated_at": "2024-06-20T05:41:58.053613Z", + "custom_position": 6, "effective_type": "type/BigInteger", "active": true, + "nfc_path": null, "parent_id": null, - "id": 45, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 76, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 6, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "bank_transfer_amount", - "database_position": 6, + "display_name": "Coupon Amount", + "database_position": 5, + "database_required": false, "fingerprint": { "global": { - "distinct-count": 19, + "distinct-count": 12, "nil%": 0.0 }, "type": { "type/Number": { "min": 0.0, "q1": 0.0, - "q3": 4.75, + "q3": 0.4747603274810728, "max": 26.0, - "sd": 7.420825132023675, - "avg": 4.151515151515151 + "sd": 5.955012405351229, + "avg": 1.8686868686868687 } } }, - "created_at": "2021-07-21T05:47:53.43953Z", + "created_at": "2024-06-19T11:49:38.765377Z", "base_type": "type/BigInteger", "points_of_interest": null }, { - "description": null, + "description": "Amount of the order (AUD) paid for by bank transfer", "database_type": "int8", "semantic_type": "type/Category", - "table_id": 6, + "table_id": 10, "coercion_strategy": null, - "name": "gift_card_amount", + "database_indexed": null, + "name": "bank_transfer_amount", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.201036Z", - "custom_position": 0, + "updated_at": "2024-06-20T05:41:58.055474Z", + "custom_position": 7, "effective_type": "type/BigInteger", "active": true, + "nfc_path": null, "parent_id": null, - "id": 48, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 77, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 7, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "gift_card_amount", - "database_position": 7, + "display_name": "Bank Transfer Amount", + "database_position": 6, + "database_required": false, "fingerprint": { "global": { - "distinct-count": 11, + "distinct-count": 19, "nil%": 0.0 }, "type": { "type/Number": { "min": 0.0, "q1": 0.0, - "q3": 1.3692088763283736, - "max": 30.0, - "sd": 6.392362351566517, - "avg": 2.0707070707070705 + "q3": 4.75, + "max": 26.0, + "sd": 7.420825132023675, + "avg": 4.151515151515151 } } }, - "created_at": "2021-07-21T05:47:53.447026Z", + "created_at": "2024-06-19T11:49:38.765377Z", "base_type": "type/BigInteger", "points_of_interest": null }, { - "description": null, + "description": "Amount of the order (AUD) paid for by gift card", "database_type": "int8", - "semantic_type": null, - "table_id": 6, + "semantic_type": "type/Category", + "table_id": 10, "coercion_strategy": null, - "name": "amount", + "database_indexed": null, + "name": "gift_card_amount", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.206083Z", - "custom_position": 0, + "updated_at": "2024-06-20T05:41:58.05653Z", + "custom_position": 8, "effective_type": "type/BigInteger", "active": true, + "nfc_path": null, "parent_id": null, - "id": 52, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 80, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 8, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "amount", - "database_position": 8, + "display_name": "Gift Card Amount", + "database_position": 7, + "database_required": false, "fingerprint": { "global": { - "distinct-count": 32, + "distinct-count": 11, "nil%": 0.0 }, "type": { "type/Number": { "min": 0.0, - "q1": 8.202945002812456, - "q3": 24.26138721247417, - "max": 58.0, - "sd": 10.736062525374601, - "avg": 16.88888888888889 + "q1": 0.0, + "q3": 1.3692088763283736, + "max": 30.0, + "sd": 6.392362351566517, + "avg": 2.0707070707070705 } } }, - "created_at": "2021-07-21T05:47:53.455652Z", + "created_at": "2024-06-19T11:49:38.765377Z", "base_type": "type/BigInteger", "points_of_interest": null } ], - "caveats": null, + "caveats": "Some facts are derived from payments", "segments": [], - "updated_at": "2021-07-21T07:30:35.162732Z", - "entity_name": null, + "updated_at": "2024-06-20T06:03:34.567961Z", "active": true, - "id": 6, + "id": 10, "db_id": 2, "visibility_type": null, - "field_order": "database", - "display_name": "orders", + "field_order": "custom", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "Orders", "metrics": [], - "created_at": "2021-07-21T05:47:53.368244Z", - "points_of_interest": null + "created_at": "2024-06-19T11:49:38.600376Z", + "estimated_row_count": 99, + "points_of_interest": "Basic information only" }, { "description": null, "entity_type": "entity/GenericTable", + "view_count": 0, "schema": "public", + "database_require_filter": null, "show_in_getting_started": false, "name": "raw_customers", "fields": [ @@ -786,29 +964,35 @@ "description": null, "database_type": "int4", "semantic_type": "type/PK", - "table_id": 9, + "table_id": 13, "coercion_strategy": null, + "database_indexed": null, "name": "id", "fingerprint_version": 5, "has_field_values": "none", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.234376Z", + "updated_at": "2024-06-19T11:49:39.47428Z", "custom_position": 0, "effective_type": "type/Integer", "active": true, + "nfc_path": null, "parent_id": null, - "id": 55, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 98, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 0, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "id", + "display_name": "ID", "database_position": 0, + "database_required": false, "fingerprint": null, - "created_at": "2021-07-21T05:47:53.473642Z", + "created_at": "2024-06-19T11:49:38.826019Z", "base_type": "type/Integer", "points_of_interest": null }, @@ -816,27 +1000,33 @@ "description": null, "database_type": "text", "semantic_type": "type/Name", - "table_id": 9, + "table_id": 13, "coercion_strategy": null, + "database_indexed": null, "name": "first_name", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.208554Z", + "updated_at": "2024-06-19T11:49:39.47428Z", "custom_position": 0, "effective_type": "type/Text", "active": true, + "nfc_path": null, "parent_id": null, - "id": 53, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 96, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 1, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "first_name", + "display_name": "First Name", "database_position": 1, + "database_required": false, "fingerprint": { "global": { "distinct-count": 79, @@ -852,7 +1042,7 @@ } } }, - "created_at": "2021-07-21T05:47:53.469932Z", + "created_at": "2024-06-19T11:49:38.826019Z", "base_type": "type/Text", "points_of_interest": null }, @@ -860,27 +1050,33 @@ "description": null, "database_type": "text", "semantic_type": "type/Name", - "table_id": 9, + "table_id": 13, "coercion_strategy": null, + "database_indexed": null, "name": "last_name", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.262668Z", + "updated_at": "2024-06-19T11:49:39.47428Z", "custom_position": 0, "effective_type": "type/Text", "active": true, + "nfc_path": null, "parent_id": null, - "id": 54, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 97, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 2, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "last_name", + "display_name": "Last Name", "database_position": 2, + "database_required": false, "fingerprint": { "global": { "distinct-count": 19, @@ -896,29 +1092,33 @@ } } }, - "created_at": "2021-07-21T05:47:53.471892Z", + "created_at": "2024-06-19T11:49:38.826019Z", "base_type": "type/Text", "points_of_interest": null } ], "caveats": null, "segments": [], - "updated_at": "2021-07-21T07:30:35.166218Z", - "entity_name": null, + "updated_at": "2024-06-20T06:03:34.567961Z", "active": true, - "id": 9, + "id": 13, "db_id": 2, "visibility_type": null, "field_order": "database", - "display_name": "raw_customers", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "Raw Customers", "metrics": [], - "created_at": "2021-07-21T05:47:53.380782Z", + "created_at": "2024-06-19T11:49:38.633775Z", + "estimated_row_count": 100, "points_of_interest": null }, { "description": null, "entity_type": "entity/TransactionTable", + "view_count": 0, "schema": "public", + "database_require_filter": null, "show_in_getting_started": false, "name": "raw_orders", "fields": [ @@ -926,29 +1126,35 @@ "description": null, "database_type": "int4", "semantic_type": "type/PK", - "table_id": 12, + "table_id": 14, "coercion_strategy": null, + "database_indexed": null, "name": "id", "fingerprint_version": 5, "has_field_values": "none", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.266036Z", + "updated_at": "2024-06-19T11:49:39.47428Z", "custom_position": 0, "effective_type": "type/Integer", "active": true, + "nfc_path": null, "parent_id": null, - "id": 57, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 102, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 0, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "id", + "display_name": "ID", "database_position": 0, + "database_required": false, "fingerprint": null, - "created_at": "2021-07-21T05:47:53.48931Z", + "created_at": "2024-06-19T11:49:38.845799Z", "base_type": "type/Integer", "points_of_interest": null }, @@ -956,27 +1162,33 @@ "description": null, "database_type": "int4", "semantic_type": null, - "table_id": 12, + "table_id": 14, "coercion_strategy": null, + "database_indexed": null, "name": "user_id", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.214697Z", + "updated_at": "2024-06-19T11:49:39.47428Z", "custom_position": 0, "effective_type": "type/Integer", "active": true, + "nfc_path": null, "parent_id": null, - "id": 59, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 101, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 1, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "user_id", + "display_name": "User ID", "database_position": 1, + "database_required": false, "fingerprint": { "global": { "distinct-count": 62, @@ -993,7 +1205,7 @@ } } }, - "created_at": "2021-07-21T05:47:53.494231Z", + "created_at": "2024-06-19T11:49:38.845799Z", "base_type": "type/Integer", "points_of_interest": null }, @@ -1001,27 +1213,33 @@ "description": null, "database_type": "date", "semantic_type": null, - "table_id": 12, + "table_id": 14, "coercion_strategy": null, + "database_indexed": null, "name": "order_date", "fingerprint_version": 5, "has_field_values": "none", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.268564Z", + "updated_at": "2024-06-19T11:49:39.47428Z", "custom_position": 0, "effective_type": "type/Date", "active": true, + "nfc_path": null, "parent_id": null, - "id": 56, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 99, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 2, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "order_date", + "display_name": "Order Date", "database_position": 2, + "database_required": false, "fingerprint": { "global": { "distinct-count": 69, @@ -1034,7 +1252,7 @@ } } }, - "created_at": "2021-07-21T05:47:53.48571Z", + "created_at": "2024-06-19T11:49:38.845799Z", "base_type": "type/Date", "points_of_interest": null }, @@ -1042,27 +1260,33 @@ "description": null, "database_type": "text", "semantic_type": "type/Category", - "table_id": 12, + "table_id": 14, "coercion_strategy": null, + "database_indexed": null, "name": "status", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.211374Z", + "updated_at": "2024-06-19T11:49:39.47428Z", "custom_position": 0, "effective_type": "type/Text", "active": true, + "nfc_path": null, "parent_id": null, - "id": 58, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 100, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 3, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "status", + "display_name": "Status", "database_position": 3, + "database_required": false, "fingerprint": { "global": { "distinct-count": 5, @@ -1078,29 +1302,33 @@ } } }, - "created_at": "2021-07-21T05:47:53.491699Z", + "created_at": "2024-06-19T11:49:38.845799Z", "base_type": "type/Text", "points_of_interest": null } ], "caveats": null, "segments": [], - "updated_at": "2021-07-21T07:30:35.170459Z", - "entity_name": null, + "updated_at": "2024-06-20T06:03:34.567961Z", "active": true, - "id": 12, + "id": 14, "db_id": 2, "visibility_type": null, "field_order": "database", - "display_name": "raw_orders", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "Raw Orders", "metrics": [], - "created_at": "2021-07-21T05:47:53.391873Z", + "created_at": "2024-06-19T11:49:38.648208Z", + "estimated_row_count": 99, "points_of_interest": null }, { "description": null, "entity_type": "entity/GenericTable", + "view_count": 0, "schema": "public", + "database_require_filter": null, "show_in_getting_started": false, "name": "raw_payments", "fields": [ @@ -1110,27 +1338,33 @@ "semantic_type": "type/PK", "table_id": 11, "coercion_strategy": null, + "database_indexed": null, "name": "id", "fingerprint_version": 5, "has_field_values": "none", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.271155Z", + "updated_at": "2024-06-19T11:49:39.47428Z", "custom_position": 0, "effective_type": "type/Integer", "active": true, + "nfc_path": null, "parent_id": null, - "id": 62, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 85, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 0, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "id", + "display_name": "ID", "database_position": 0, + "database_required": false, "fingerprint": null, - "created_at": "2021-07-21T05:47:53.511724Z", + "created_at": "2024-06-19T11:49:38.787871Z", "base_type": "type/Integer", "points_of_interest": null }, @@ -1140,25 +1374,31 @@ "semantic_type": null, "table_id": 11, "coercion_strategy": null, + "database_indexed": null, "name": "order_id", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.247411Z", + "updated_at": "2024-06-19T11:49:39.47428Z", "custom_position": 0, "effective_type": "type/Integer", "active": true, + "nfc_path": null, "parent_id": null, - "id": 60, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 87, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 1, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "order_id", + "display_name": "Order ID", "database_position": 1, + "database_required": false, "fingerprint": { "global": { "distinct-count": 99, @@ -1175,7 +1415,7 @@ } } }, - "created_at": "2021-07-21T05:47:53.506967Z", + "created_at": "2024-06-19T11:49:38.787871Z", "base_type": "type/Integer", "points_of_interest": null }, @@ -1185,25 +1425,31 @@ "semantic_type": "type/Category", "table_id": 11, "coercion_strategy": null, + "database_indexed": null, "name": "payment_method", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.217422Z", + "updated_at": "2024-06-19T11:49:39.47428Z", "custom_position": 0, "effective_type": "type/Text", "active": true, + "nfc_path": null, "parent_id": null, - "id": 61, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 88, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 2, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "payment_method", + "display_name": "Payment Method", "database_position": 2, + "database_required": false, "fingerprint": { "global": { "distinct-count": 4, @@ -1219,7 +1465,7 @@ } } }, - "created_at": "2021-07-21T05:47:53.508887Z", + "created_at": "2024-06-19T11:49:38.787871Z", "base_type": "type/Text", "points_of_interest": null }, @@ -1229,25 +1475,31 @@ "semantic_type": "type/Category", "table_id": 11, "coercion_strategy": null, + "database_indexed": null, "name": "amount", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.273607Z", + "updated_at": "2024-06-19T11:49:39.47428Z", "custom_position": 0, "effective_type": "type/Integer", "active": true, + "nfc_path": null, "parent_id": null, - "id": 63, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 86, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 3, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "amount", + "display_name": "Amount", "database_position": 3, + "database_required": false, "fingerprint": { "global": { "distinct-count": 30, @@ -1264,29 +1516,33 @@ } } }, - "created_at": "2021-07-21T05:47:53.513727Z", + "created_at": "2024-06-19T11:49:38.787871Z", "base_type": "type/Integer", "points_of_interest": null } ], "caveats": null, "segments": [], - "updated_at": "2021-07-21T07:30:35.173953Z", - "entity_name": null, + "updated_at": "2024-06-20T06:03:34.567961Z", "active": true, "id": 11, "db_id": 2, "visibility_type": null, "field_order": "database", - "display_name": "raw_payments", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "Raw Payments", "metrics": [], - "created_at": "2021-07-21T05:47:53.388179Z", + "created_at": "2024-06-19T11:49:38.607177Z", + "estimated_row_count": 113, "points_of_interest": null }, { "description": null, "entity_type": "entity/GenericTable", + "view_count": 0, "schema": "public", + "database_require_filter": null, "show_in_getting_started": false, "name": "stg_customers", "fields": [ @@ -1294,27 +1550,33 @@ "description": null, "database_type": "int4", "semantic_type": null, - "table_id": 8, + "table_id": 16, "coercion_strategy": null, + "database_indexed": null, "name": "customer_id", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.276108Z", + "updated_at": "2024-06-20T05:41:58.068227Z", "custom_position": 0, "effective_type": "type/Integer", "active": true, + "nfc_path": null, "parent_id": null, - "id": 65, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 108, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 0, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "customer_id", + "display_name": "Customer ID", "database_position": 0, + "database_required": false, "fingerprint": { "global": { "distinct-count": 100, @@ -1331,29 +1593,133 @@ } } }, - "created_at": "2021-07-21T05:47:53.528091Z", + "created_at": "2024-06-19T11:49:38.870444Z", "base_type": "type/Integer", "points_of_interest": null + }, + { + "description": null, + "database_type": "text", + "semantic_type": "type/Name", + "table_id": 16, + "coercion_strategy": null, + "database_indexed": null, + "name": "first_name", + "fingerprint_version": 5, + "has_field_values": "list", + "settings": null, + "caveats": null, + "fk_target_field_id": null, + "updated_at": "2024-06-20T05:41:58.069308Z", + "custom_position": 1, + "effective_type": "type/Text", + "active": true, + "nfc_path": null, + "parent_id": null, + "id": 107, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, + "position": 1, + "visibility_type": "normal", + "target": null, + "preview_display": true, + "display_name": "First Name", + "database_position": 1, + "database_required": false, + "fingerprint": { + "global": { + "distinct-count": 79, + "nil%": 0.0 + }, + "type": { + "type/Text": { + "percent-json": 0.0, + "percent-url": 0.0, + "percent-email": 0.0, + "percent-state": 0.02, + "average-length": 5.86 + } + } + }, + "created_at": "2024-06-19T11:49:38.870444Z", + "base_type": "type/Text", + "points_of_interest": null + }, + { + "description": null, + "database_type": "text", + "semantic_type": "type/Name", + "table_id": 16, + "coercion_strategy": null, + "database_indexed": null, + "name": "last_name", + "fingerprint_version": 5, + "has_field_values": "list", + "settings": null, + "caveats": null, + "fk_target_field_id": null, + "updated_at": "2024-06-20T05:41:58.070264Z", + "custom_position": 2, + "effective_type": "type/Text", + "active": true, + "nfc_path": null, + "parent_id": null, + "id": 109, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, + "position": 2, + "visibility_type": "normal", + "target": null, + "preview_display": true, + "display_name": "Last Name", + "database_position": 2, + "database_required": false, + "fingerprint": { + "global": { + "distinct-count": 19, + "nil%": 0.0 + }, + "type": { + "type/Text": { + "percent-json": 0.0, + "percent-url": 0.0, + "percent-email": 0.0, + "percent-state": 0.0, + "average-length": 2.0 + } + } + }, + "created_at": "2024-06-19T11:49:38.870444Z", + "base_type": "type/Text", + "points_of_interest": null } ], "caveats": null, "segments": [], - "updated_at": "2021-07-21T07:30:35.176617Z", - "entity_name": null, + "updated_at": "2024-06-20T06:03:34.567961Z", "active": true, - "id": 8, + "id": 16, "db_id": 2, "visibility_type": null, - "field_order": "database", - "display_name": "stg_customers", + "field_order": "custom", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "Stg Customers", "metrics": [], - "created_at": "2021-07-21T05:47:53.376525Z", + "created_at": "2024-06-19T11:49:38.669615Z", + "estimated_row_count": null, "points_of_interest": null }, { "description": null, "entity_type": "entity/TransactionTable", + "view_count": 0, "schema": "public", + "database_require_filter": null, "show_in_getting_started": false, "name": "stg_orders", "fields": [ @@ -1361,27 +1727,33 @@ "description": null, "database_type": "int4", "semantic_type": null, - "table_id": 5, + "table_id": 15, "coercion_strategy": null, + "database_indexed": null, "name": "order_id", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.225874Z", + "updated_at": "2024-06-20T05:41:58.096268Z", "custom_position": 0, "effective_type": "type/Integer", "active": true, + "nfc_path": null, "parent_id": null, - "id": 68, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 106, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 0, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "order_id", + "display_name": "Order ID", "database_position": 0, + "database_required": false, "fingerprint": { "global": { "distinct-count": 99, @@ -1398,7 +1770,7 @@ } } }, - "created_at": "2021-07-21T05:47:53.545842Z", + "created_at": "2024-06-19T11:49:38.865141Z", "base_type": "type/Integer", "points_of_interest": null }, @@ -1406,27 +1778,33 @@ "description": null, "database_type": "text", "semantic_type": "type/Category", - "table_id": 5, + "table_id": 15, "coercion_strategy": null, + "database_indexed": null, "name": "status", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.27984Z", - "custom_position": 0, + "updated_at": "2024-06-20T05:41:58.09722Z", + "custom_position": 1, "effective_type": "type/Text", "active": true, + "nfc_path": null, "parent_id": null, - "id": 69, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 3, + "id": 103, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, + "position": 1, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "status", + "display_name": "Status", "database_position": 3, + "database_required": false, "fingerprint": { "global": { "distinct-count": 5, @@ -1442,29 +1820,131 @@ } } }, - "created_at": "2021-07-21T05:47:53.547849Z", + "created_at": "2024-06-19T11:49:38.865141Z", "base_type": "type/Text", "points_of_interest": null + }, + { + "description": null, + "database_type": "date", + "semantic_type": null, + "table_id": 15, + "coercion_strategy": null, + "database_indexed": null, + "name": "order_date", + "fingerprint_version": 5, + "has_field_values": "none", + "settings": null, + "caveats": null, + "fk_target_field_id": null, + "updated_at": "2024-06-20T05:41:58.09817Z", + "custom_position": 2, + "effective_type": "type/Date", + "active": true, + "nfc_path": null, + "parent_id": null, + "id": 104, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, + "position": 2, + "visibility_type": "normal", + "target": null, + "preview_display": true, + "display_name": "Order Date", + "database_position": 2, + "database_required": false, + "fingerprint": { + "global": { + "distinct-count": 69, + "nil%": 0.0 + }, + "type": { + "type/DateTime": { + "earliest": "2018-01-01", + "latest": "2018-04-09" + } + } + }, + "created_at": "2024-06-19T11:49:38.865141Z", + "base_type": "type/Date", + "points_of_interest": null + }, + { + "description": null, + "database_type": "int4", + "semantic_type": null, + "table_id": 15, + "coercion_strategy": null, + "database_indexed": null, + "name": "customer_id", + "fingerprint_version": 5, + "has_field_values": "list", + "settings": null, + "caveats": null, + "fk_target_field_id": null, + "updated_at": "2024-06-20T05:41:58.099319Z", + "custom_position": 3, + "effective_type": "type/Integer", + "active": true, + "nfc_path": null, + "parent_id": null, + "id": 105, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, + "position": 3, + "visibility_type": "normal", + "target": null, + "preview_display": true, + "display_name": "Customer ID", + "database_position": 1, + "database_required": false, + "fingerprint": { + "global": { + "distinct-count": 62, + "nil%": 0.0 + }, + "type": { + "type/Number": { + "min": 1.0, + "q1": 25.875, + "q3": 69.625, + "max": 99.0, + "sd": 27.781341350472964, + "avg": 48.25252525252525 + } + } + }, + "created_at": "2024-06-19T11:49:38.865141Z", + "base_type": "type/Integer", + "points_of_interest": null } ], "caveats": null, "segments": [], - "updated_at": "2021-07-21T07:30:35.179323Z", - "entity_name": null, + "updated_at": "2024-06-20T06:03:34.567961Z", "active": true, - "id": 5, + "id": 15, "db_id": 2, "visibility_type": null, - "field_order": "database", - "display_name": "stg_orders", + "field_order": "custom", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "Stg Orders", "metrics": [], - "created_at": "2021-07-21T05:47:53.363321Z", + "created_at": "2024-06-19T11:49:38.659111Z", + "estimated_row_count": null, "points_of_interest": null }, { "description": null, "entity_type": "entity/GenericTable", + "view_count": 0, "schema": "public", + "database_require_filter": null, "show_in_getting_started": false, "name": "stg_payments", "fields": [ @@ -1472,27 +1952,33 @@ "description": null, "database_type": "int4", "semantic_type": null, - "table_id": 10, + "table_id": 9, "coercion_strategy": null, + "database_indexed": null, "name": "payment_id", "fingerprint_version": 5, - "has_field_values": "none", + "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.191434Z", + "updated_at": "2024-06-20T05:41:58.081283Z", "custom_position": 0, "effective_type": "type/Integer", "active": true, + "nfc_path": null, "parent_id": null, - "id": 74, - "last_analyzed": "2021-07-21T05:47:54.560768Z", + "id": 72, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, "position": 0, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "payment_id", + "display_name": "Payment ID", "database_position": 0, + "database_required": false, "fingerprint": { "global": { "distinct-count": 113, @@ -1509,7 +1995,7 @@ } } }, - "created_at": "2021-07-21T05:47:53.570339Z", + "created_at": "2024-06-19T11:49:38.737818Z", "base_type": "type/Integer", "points_of_interest": null }, @@ -1517,27 +2003,33 @@ "description": null, "database_type": "text", "semantic_type": "type/Category", - "table_id": 10, + "table_id": 9, "coercion_strategy": null, + "database_indexed": null, "name": "payment_method", "fingerprint_version": 5, "has_field_values": "list", "settings": null, "caveats": null, "fk_target_field_id": null, - "updated_at": "2021-07-21T07:30:35.236542Z", - "custom_position": 0, + "updated_at": "2024-06-20T05:41:58.082175Z", + "custom_position": 1, "effective_type": "type/Text", "active": true, + "nfc_path": null, "parent_id": null, - "id": 72, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 2, + "id": 73, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, + "position": 1, "visibility_type": "normal", "target": null, "preview_display": true, - "display_name": "payment_method", + "display_name": "Payment Method", "database_position": 2, + "database_required": false, "fingerprint": { "global": { "distinct-count": 4, @@ -1553,44 +2045,161 @@ } } }, - "created_at": "2021-07-21T05:47:53.566146Z", + "created_at": "2024-06-19T11:49:38.737818Z", "base_type": "type/Text", "points_of_interest": null + }, + { + "description": null, + "database_type": "int4", + "semantic_type": null, + "table_id": 9, + "coercion_strategy": null, + "database_indexed": null, + "name": "order_id", + "fingerprint_version": 5, + "has_field_values": "list", + "settings": null, + "caveats": null, + "fk_target_field_id": null, + "updated_at": "2024-06-20T05:41:58.083109Z", + "custom_position": 2, + "effective_type": "type/Integer", + "active": true, + "nfc_path": null, + "parent_id": null, + "id": 75, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, + "position": 2, + "visibility_type": "normal", + "target": null, + "preview_display": true, + "display_name": "Order ID", + "database_position": 1, + "database_required": false, + "fingerprint": { + "global": { + "distinct-count": 99, + "nil%": 0.0 + }, + "type": { + "type/Number": { + "min": 1.0, + "q1": 24.904857366030992, + "q3": 75.25, + "max": 99.0, + "sd": 28.540193317267853, + "avg": 50.0353982300885 + } + } + }, + "created_at": "2024-06-19T11:49:38.737818Z", + "base_type": "type/Integer", + "points_of_interest": null + }, + { + "description": null, + "database_type": "int4", + "semantic_type": "type/Category", + "table_id": 9, + "coercion_strategy": null, + "database_indexed": null, + "name": "amount", + "fingerprint_version": 5, + "has_field_values": "list", + "settings": null, + "caveats": null, + "fk_target_field_id": null, + "updated_at": "2024-06-20T05:41:58.084131Z", + "custom_position": 3, + "effective_type": "type/Integer", + "active": true, + "nfc_path": null, + "parent_id": null, + "id": 74, + "last_analyzed": "2024-06-19T11:49:39.47428Z", + "database_partitioned": null, + "database_is_auto_increment": false, + "json_unfolding": false, + "position": 3, + "visibility_type": "normal", + "target": null, + "preview_display": true, + "display_name": "Amount", + "database_position": 3, + "database_required": false, + "fingerprint": { + "global": { + "distinct-count": 30, + "nil%": 0.0 + }, + "type": { + "type/Number": { + "min": 0.0, + "q1": 6.064037815689349, + "q3": 22.787918451395115, + "max": 30.0, + "sd": 9.198368733518729, + "avg": 14.79646017699115 + } + } + }, + "created_at": "2024-06-19T11:49:38.737818Z", + "base_type": "type/Integer", + "points_of_interest": null } ], "caveats": null, "segments": [], - "updated_at": "2021-07-21T07:30:35.181929Z", - "entity_name": null, + "updated_at": "2024-06-20T06:03:34.567961Z", "active": true, - "id": 10, + "id": 9, "db_id": 2, "visibility_type": null, - "field_order": "database", - "display_name": "stg_payments", + "field_order": "custom", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "Stg Payments", "metrics": [], - "created_at": "2021-07-21T05:47:53.384404Z", + "created_at": "2024-06-19T11:49:38.586822Z", + "estimated_row_count": null, "points_of_interest": null } ], + "creator_id": 1, "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", + "updated_at": "2024-06-20T05:33:42.131951Z", + "cache_ttl": null, "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", "ssl": false, - "additional-options": null, - "tunnel-enabled": false + "password": "**MetabasePass**", + "port": 5432, + "advanced-options": false, + "schema-filters-type": "all", + "dbname": "dbtmetabase", + "host": "postgres", + "tunnel-enabled": false, + "user": "dbtmetabase" }, "is_sample": false, "id": 2, "is_on_demand": false, - "options": null, "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", + "initial_sync_status": "complete", + "is_audit": false, + "dbms_version": { + "flavor": "PostgreSQL", + "version": "16.1 (Debian 16.1-1.pgdg120+1)", + "semantic-version": [ + 16, + 1 + ] + }, + "uploads_enabled": false, + "refingerprint": false, + "created_at": "2024-06-19T11:49:38.313316Z", "points_of_interest": null -} +} \ No newline at end of file diff --git a/tests/fixtures/api/field/37.json b/tests/fixtures/api/field/37.json deleted file mode 100644 index 2aa1dea..0000000 --- a/tests/fixtures/api/field/37.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "description": null, - "database_type": "text", - "semantic_type": "type/Name", - "table_id": 7, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "customers", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.159586Z", - "entity_name": null, - "active": true, - "id": 7, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "customers", - "created_at": "2021-07-21T05:47:53.372467Z", - "points_of_interest": null - }, - "name": "first_name", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.242305Z", - "custom_position": 0, - "effective_type": "type/Text", - "active": true, - "parent_id": null, - "id": 37, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 1, - "visibility_type": "normal", - "preview_display": true, - "display_name": "first_name", - "database_position": 1, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 79, - "nil%": 0.0 - }, - "type": { - "type/Text": { - "percent-json": 0.0, - "percent-url": 0.0, - "percent-email": 0.0, - "percent-state": 0.02, - "average-length": 5.86 - } - } - }, - "created_at": "2021-07-21T05:47:53.404944Z", - "base_type": "type/Text", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/38.json b/tests/fixtures/api/field/38.json deleted file mode 100644 index ba3d530..0000000 --- a/tests/fixtures/api/field/38.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int4", - "semantic_type": null, - "table_id": 7, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "customers", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.159586Z", - "entity_name": null, - "active": true, - "id": 7, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "customers", - "created_at": "2021-07-21T05:47:53.372467Z", - "points_of_interest": null - }, - "name": "customer_id", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.194597Z", - "custom_position": 0, - "effective_type": "type/Integer", - "active": true, - "parent_id": null, - "id": 38, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 0, - "visibility_type": "normal", - "preview_display": true, - "display_name": "customer_id", - "database_position": 0, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 100, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 25.5, - "q3": 75.5, - "max": 100.0, - "sd": 29.008358252146028, - "avg": 50.5 - } - } - }, - "created_at": "2021-07-21T05:47:53.408064Z", - "base_type": "type/Integer", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/39.json b/tests/fixtures/api/field/39.json deleted file mode 100644 index 2dfd6ea..0000000 --- a/tests/fixtures/api/field/39.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "description": null, - "database_type": "date", - "semantic_type": null, - "table_id": 7, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "customers", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.159586Z", - "entity_name": null, - "active": true, - "id": 7, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "customers", - "created_at": "2021-07-21T05:47:53.372467Z", - "points_of_interest": null - }, - "name": "first_order", - "fingerprint_version": 5, - "has_field_values": "none", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.232032Z", - "custom_position": 0, - "effective_type": "type/Date", - "active": true, - "parent_id": null, - "id": 39, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 3, - "visibility_type": "normal", - "preview_display": true, - "display_name": "first_order", - "database_position": 3, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 47, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-07" - } - } - }, - "created_at": "2021-07-21T05:47:53.410556Z", - "base_type": "type/Date", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/40.json b/tests/fixtures/api/field/40.json deleted file mode 100644 index 4314268..0000000 --- a/tests/fixtures/api/field/40.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int8", - "semantic_type": "type/Quantity", - "table_id": 7, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "customers", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.159586Z", - "entity_name": null, - "active": true, - "id": 7, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "customers", - "created_at": "2021-07-21T05:47:53.372467Z", - "points_of_interest": null - }, - "name": "number_of_orders", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.197576Z", - "custom_position": 0, - "effective_type": "type/BigInteger", - "active": true, - "parent_id": null, - "id": 40, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 5, - "visibility_type": "normal", - "preview_display": true, - "display_name": "number_of_orders", - "database_position": 5, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.38 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 1.0, - "q3": 2.0901356485315583, - "max": 5.0, - "sd": 0.7779687173818424, - "avg": 1.596774193548387 - } - } - }, - "created_at": "2021-07-21T05:47:53.412376Z", - "base_type": "type/BigInteger", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/41.json b/tests/fixtures/api/field/41.json deleted file mode 100644 index b602c7a..0000000 --- a/tests/fixtures/api/field/41.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int8", - "semantic_type": null, - "table_id": 7, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "customers", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.159586Z", - "entity_name": null, - "active": true, - "id": 7, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "customers", - "created_at": "2021-07-21T05:47:53.372467Z", - "points_of_interest": null - }, - "name": "customer_lifetime_value", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.288463Z", - "custom_position": 0, - "effective_type": "type/BigInteger", - "active": true, - "parent_id": null, - "id": 41, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 6, - "visibility_type": "normal", - "preview_display": true, - "display_name": "customer_lifetime_value", - "database_position": 6, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 36, - "nil%": 0.38 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 13.464101615137753, - "q3": 35.46410161513776, - "max": 99.0, - "sd": 18.812245525263663, - "avg": 26.967741935483872 - } - } - }, - "created_at": "2021-07-21T05:47:53.414671Z", - "base_type": "type/BigInteger", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/42.json b/tests/fixtures/api/field/42.json deleted file mode 100644 index 22b3a5a..0000000 --- a/tests/fixtures/api/field/42.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "description": null, - "database_type": "date", - "semantic_type": null, - "table_id": 7, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "customers", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.159586Z", - "entity_name": null, - "active": true, - "id": 7, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "customers", - "created_at": "2021-07-21T05:47:53.372467Z", - "points_of_interest": null - }, - "name": "most_recent_order", - "fingerprint_version": 5, - "has_field_values": "none", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.186143Z", - "custom_position": 0, - "effective_type": "type/Date", - "active": true, - "parent_id": null, - "id": 42, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 4, - "visibility_type": "normal", - "preview_display": true, - "display_name": "most_recent_order", - "database_position": 4, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 53, - "nil%": 0.38 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-09", - "latest": "2018-04-09" - } - } - }, - "created_at": "2021-07-21T05:47:53.417127Z", - "base_type": "type/Date", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/43.json b/tests/fixtures/api/field/43.json deleted file mode 100644 index 2e643af..0000000 --- a/tests/fixtures/api/field/43.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "description": null, - "database_type": "text", - "semantic_type": "type/Name", - "table_id": 7, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "customers", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.159586Z", - "entity_name": null, - "active": true, - "id": 7, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "customers", - "created_at": "2021-07-21T05:47:53.372467Z", - "points_of_interest": null - }, - "name": "last_name", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.249828Z", - "custom_position": 0, - "effective_type": "type/Text", - "active": true, - "parent_id": null, - "id": 43, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 2, - "visibility_type": "normal", - "preview_display": true, - "display_name": "last_name", - "database_position": 2, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 19, - "nil%": 0.0 - }, - "type": { - "type/Text": { - "percent-json": 0.0, - "percent-url": 0.0, - "percent-email": 0.0, - "percent-state": 0.0, - "average-length": 2.0 - } - } - }, - "created_at": "2021-07-21T05:47:53.419931Z", - "base_type": "type/Text", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/44.json b/tests/fixtures/api/field/44.json deleted file mode 100644 index 130e5ed..0000000 --- a/tests/fixtures/api/field/44.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int8", - "semantic_type": "type/Category", - "table_id": 6, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.162732Z", - "entity_name": null, - "active": true, - "id": 6, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "orders", - "created_at": "2021-07-21T05:47:53.368244Z", - "points_of_interest": null - }, - "name": "credit_card_amount", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.24496Z", - "custom_position": 0, - "effective_type": "type/BigInteger", - "active": true, - "parent_id": null, - "id": 44, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 4, - "visibility_type": "normal", - "preview_display": true, - "display_name": "credit_card_amount", - "database_position": 4, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 25, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 0.0, - "q3": 18.797054997187544, - "max": 30.0, - "sd": 10.959088854927673, - "avg": 8.797979797979798 - } - } - }, - "created_at": "2021-07-21T05:47:53.43752Z", - "base_type": "type/BigInteger", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/45.json b/tests/fixtures/api/field/45.json deleted file mode 100644 index fcbf009..0000000 --- a/tests/fixtures/api/field/45.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int8", - "semantic_type": "type/Category", - "table_id": 6, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.162732Z", - "entity_name": null, - "active": true, - "id": 6, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "orders", - "created_at": "2021-07-21T05:47:53.368244Z", - "points_of_interest": null - }, - "name": "bank_transfer_amount", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.25288Z", - "custom_position": 0, - "effective_type": "type/BigInteger", - "active": true, - "parent_id": null, - "id": 45, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 6, - "visibility_type": "normal", - "preview_display": true, - "display_name": "bank_transfer_amount", - "database_position": 6, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 19, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 0.0, - "q3": 4.75, - "max": 26.0, - "sd": 7.420825132023675, - "avg": 4.151515151515151 - } - } - }, - "created_at": "2021-07-21T05:47:53.43953Z", - "base_type": "type/BigInteger", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/46.json b/tests/fixtures/api/field/46.json deleted file mode 100644 index 4ff4199..0000000 --- a/tests/fixtures/api/field/46.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "description": null, - "database_type": "date", - "semantic_type": null, - "table_id": 6, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.162732Z", - "entity_name": null, - "active": true, - "id": 6, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "orders", - "created_at": "2021-07-21T05:47:53.368244Z", - "points_of_interest": null - }, - "name": "order_date", - "fingerprint_version": 5, - "has_field_values": "none", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.188819Z", - "custom_position": 0, - "effective_type": "type/Date", - "active": true, - "parent_id": null, - "id": 46, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 2, - "visibility_type": "normal", - "preview_display": true, - "display_name": "order_date", - "database_position": 2, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 69, - "nil%": 0.0 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-09" - } - } - }, - "created_at": "2021-07-21T05:47:53.441254Z", - "base_type": "type/Date", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/47.json b/tests/fixtures/api/field/47.json deleted file mode 100644 index aa31ae0..0000000 --- a/tests/fixtures/api/field/47.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int4", - "semantic_type": null, - "table_id": 6, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.162732Z", - "entity_name": null, - "active": true, - "id": 6, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "orders", - "created_at": "2021-07-21T05:47:53.368244Z", - "points_of_interest": null - }, - "name": "order_id", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.255223Z", - "custom_position": 0, - "effective_type": "type/Integer", - "active": true, - "parent_id": null, - "id": 47, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 0, - "visibility_type": "normal", - "preview_display": true, - "display_name": "order_id", - "database_position": 0, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 99, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 25.25, - "q3": 74.75, - "max": 99.0, - "sd": 28.719704534890823, - "avg": 50.0 - } - } - }, - "created_at": "2021-07-21T05:47:53.444318Z", - "base_type": "type/Integer", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/48.json b/tests/fixtures/api/field/48.json deleted file mode 100644 index e4de2b5..0000000 --- a/tests/fixtures/api/field/48.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int8", - "semantic_type": "type/Category", - "table_id": 6, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.162732Z", - "entity_name": null, - "active": true, - "id": 6, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "orders", - "created_at": "2021-07-21T05:47:53.368244Z", - "points_of_interest": null - }, - "name": "gift_card_amount", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.201036Z", - "custom_position": 0, - "effective_type": "type/BigInteger", - "active": true, - "parent_id": null, - "id": 48, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 7, - "visibility_type": "normal", - "preview_display": true, - "display_name": "gift_card_amount", - "database_position": 7, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 11, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 0.0, - "q3": 1.3692088763283736, - "max": 30.0, - "sd": 6.392362351566517, - "avg": 2.0707070707070705 - } - } - }, - "created_at": "2021-07-21T05:47:53.447026Z", - "base_type": "type/BigInteger", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/49.json b/tests/fixtures/api/field/49.json deleted file mode 100644 index 703394d..0000000 --- a/tests/fixtures/api/field/49.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int8", - "semantic_type": "type/Category", - "table_id": 6, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.162732Z", - "entity_name": null, - "active": true, - "id": 6, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "orders", - "created_at": "2021-07-21T05:47:53.368244Z", - "points_of_interest": null - }, - "name": "coupon_amount", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.25752Z", - "custom_position": 0, - "effective_type": "type/BigInteger", - "active": true, - "parent_id": null, - "id": 49, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 5, - "visibility_type": "normal", - "preview_display": true, - "display_name": "coupon_amount", - "database_position": 5, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 12, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 0.0, - "q3": 0.4747603274810728, - "max": 26.0, - "sd": 5.955012405351229, - "avg": 1.8686868686868687 - } - } - }, - "created_at": "2021-07-21T05:47:53.448941Z", - "base_type": "type/BigInteger", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/50.json b/tests/fixtures/api/field/50.json deleted file mode 100644 index 7c383f8..0000000 --- a/tests/fixtures/api/field/50.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "description": null, - "database_type": "text", - "semantic_type": "type/Category", - "table_id": 6, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.162732Z", - "entity_name": null, - "active": true, - "id": 6, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "orders", - "created_at": "2021-07-21T05:47:53.368244Z", - "points_of_interest": null - }, - "name": "status", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.203655Z", - "custom_position": 0, - "effective_type": "type/Text", - "active": true, - "parent_id": null, - "id": 50, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 3, - "visibility_type": "normal", - "preview_display": true, - "display_name": "status", - "database_position": 3, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.0 - }, - "type": { - "type/Text": { - "percent-json": 0.0, - "percent-url": 0.0, - "percent-email": 0.0, - "percent-state": 0.0, - "average-length": 8.404040404040405 - } - } - }, - "created_at": "2021-07-21T05:47:53.450839Z", - "base_type": "type/Text", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/51.json b/tests/fixtures/api/field/51.json deleted file mode 100644 index 23682fa..0000000 --- a/tests/fixtures/api/field/51.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int4", - "semantic_type": null, - "table_id": 6, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.162732Z", - "entity_name": null, - "active": true, - "id": 6, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "orders", - "created_at": "2021-07-21T05:47:53.368244Z", - "points_of_interest": null - }, - "name": "customer_id", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.259928Z", - "custom_position": 0, - "effective_type": "type/Integer", - "active": true, - "parent_id": null, - "id": 51, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 1, - "visibility_type": "normal", - "preview_display": true, - "display_name": "customer_id", - "database_position": 1, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 62, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 25.875, - "q3": 69.625, - "max": 99.0, - "sd": 27.781341350472964, - "avg": 48.25252525252525 - } - } - }, - "created_at": "2021-07-21T05:47:53.452739Z", - "base_type": "type/Integer", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/52.json b/tests/fixtures/api/field/52.json deleted file mode 100644 index be94486..0000000 --- a/tests/fixtures/api/field/52.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int8", - "semantic_type": null, - "table_id": 6, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.162732Z", - "entity_name": null, - "active": true, - "id": 6, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "orders", - "created_at": "2021-07-21T05:47:53.368244Z", - "points_of_interest": null - }, - "name": "amount", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.206083Z", - "custom_position": 0, - "effective_type": "type/BigInteger", - "active": true, - "parent_id": null, - "id": 52, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 8, - "visibility_type": "normal", - "preview_display": true, - "display_name": "amount", - "database_position": 8, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 32, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 8.202945002812456, - "q3": 24.26138721247417, - "max": 58.0, - "sd": 10.736062525374601, - "avg": 16.88888888888889 - } - } - }, - "created_at": "2021-07-21T05:47:53.455652Z", - "base_type": "type/BigInteger", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/53.json b/tests/fixtures/api/field/53.json deleted file mode 100644 index 0f077f9..0000000 --- a/tests/fixtures/api/field/53.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "description": null, - "database_type": "text", - "semantic_type": "type/Name", - "table_id": 9, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "raw_customers", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.166218Z", - "entity_name": null, - "active": true, - "id": 9, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "raw_customers", - "created_at": "2021-07-21T05:47:53.380782Z", - "points_of_interest": null - }, - "name": "first_name", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.208554Z", - "custom_position": 0, - "effective_type": "type/Text", - "active": true, - "parent_id": null, - "id": 53, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 1, - "visibility_type": "normal", - "preview_display": true, - "display_name": "first_name", - "database_position": 1, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 79, - "nil%": 0.0 - }, - "type": { - "type/Text": { - "percent-json": 0.0, - "percent-url": 0.0, - "percent-email": 0.0, - "percent-state": 0.02, - "average-length": 5.86 - } - } - }, - "created_at": "2021-07-21T05:47:53.469932Z", - "base_type": "type/Text", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/54.json b/tests/fixtures/api/field/54.json deleted file mode 100644 index 5d3ae3b..0000000 --- a/tests/fixtures/api/field/54.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "description": null, - "database_type": "text", - "semantic_type": "type/Name", - "table_id": 9, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "raw_customers", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.166218Z", - "entity_name": null, - "active": true, - "id": 9, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "raw_customers", - "created_at": "2021-07-21T05:47:53.380782Z", - "points_of_interest": null - }, - "name": "last_name", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.262668Z", - "custom_position": 0, - "effective_type": "type/Text", - "active": true, - "parent_id": null, - "id": 54, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 2, - "visibility_type": "normal", - "preview_display": true, - "display_name": "last_name", - "database_position": 2, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 19, - "nil%": 0.0 - }, - "type": { - "type/Text": { - "percent-json": 0.0, - "percent-url": 0.0, - "percent-email": 0.0, - "percent-state": 0.0, - "average-length": 2.0 - } - } - }, - "created_at": "2021-07-21T05:47:53.471892Z", - "base_type": "type/Text", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/55.json b/tests/fixtures/api/field/55.json deleted file mode 100644 index a7703e0..0000000 --- a/tests/fixtures/api/field/55.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "description": null, - "database_type": "int4", - "semantic_type": "type/PK", - "table_id": 9, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "raw_customers", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.166218Z", - "entity_name": null, - "active": true, - "id": 9, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "raw_customers", - "created_at": "2021-07-21T05:47:53.380782Z", - "points_of_interest": null - }, - "name": "id", - "fingerprint_version": 5, - "has_field_values": "none", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.234376Z", - "custom_position": 0, - "effective_type": "type/Integer", - "active": true, - "parent_id": null, - "id": 55, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 0, - "visibility_type": "normal", - "preview_display": true, - "display_name": "id", - "database_position": 0, - "name_field": { - "id": 54, - "table_id": 9, - "display_name": "last_name", - "base_type": "type/Text", - "semantic_type": "type/Name", - "has_field_values": "list" - }, - "fingerprint": null, - "created_at": "2021-07-21T05:47:53.473642Z", - "base_type": "type/Integer", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/56.json b/tests/fixtures/api/field/56.json deleted file mode 100644 index fba8f2a..0000000 --- a/tests/fixtures/api/field/56.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "description": null, - "database_type": "date", - "semantic_type": null, - "table_id": 12, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "raw_orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.170459Z", - "entity_name": null, - "active": true, - "id": 12, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "raw_orders", - "created_at": "2021-07-21T05:47:53.391873Z", - "points_of_interest": null - }, - "name": "order_date", - "fingerprint_version": 5, - "has_field_values": "none", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.268564Z", - "custom_position": 0, - "effective_type": "type/Date", - "active": true, - "parent_id": null, - "id": 56, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 2, - "visibility_type": "normal", - "preview_display": true, - "display_name": "order_date", - "database_position": 2, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 69, - "nil%": 0.0 - }, - "type": { - "type/DateTime": { - "earliest": "2018-01-01", - "latest": "2018-04-09" - } - } - }, - "created_at": "2021-07-21T05:47:53.48571Z", - "base_type": "type/Date", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/57.json b/tests/fixtures/api/field/57.json deleted file mode 100644 index 81c19cc..0000000 --- a/tests/fixtures/api/field/57.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "description": null, - "database_type": "int4", - "semantic_type": "type/PK", - "table_id": 12, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "raw_orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.170459Z", - "entity_name": null, - "active": true, - "id": 12, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "raw_orders", - "created_at": "2021-07-21T05:47:53.391873Z", - "points_of_interest": null - }, - "name": "id", - "fingerprint_version": 5, - "has_field_values": "none", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.266036Z", - "custom_position": 0, - "effective_type": "type/Integer", - "active": true, - "parent_id": null, - "id": 57, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 0, - "visibility_type": "normal", - "preview_display": true, - "display_name": "id", - "database_position": 0, - "name_field": null, - "fingerprint": null, - "created_at": "2021-07-21T05:47:53.48931Z", - "base_type": "type/Integer", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/58.json b/tests/fixtures/api/field/58.json deleted file mode 100644 index 647c3a6..0000000 --- a/tests/fixtures/api/field/58.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "description": null, - "database_type": "text", - "semantic_type": "type/Category", - "table_id": 12, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "raw_orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.170459Z", - "entity_name": null, - "active": true, - "id": 12, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "raw_orders", - "created_at": "2021-07-21T05:47:53.391873Z", - "points_of_interest": null - }, - "name": "status", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.211374Z", - "custom_position": 0, - "effective_type": "type/Text", - "active": true, - "parent_id": null, - "id": 58, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 3, - "visibility_type": "normal", - "preview_display": true, - "display_name": "status", - "database_position": 3, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.0 - }, - "type": { - "type/Text": { - "percent-json": 0.0, - "percent-url": 0.0, - "percent-email": 0.0, - "percent-state": 0.0, - "average-length": 8.404040404040405 - } - } - }, - "created_at": "2021-07-21T05:47:53.491699Z", - "base_type": "type/Text", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/59.json b/tests/fixtures/api/field/59.json deleted file mode 100644 index 207ef6e..0000000 --- a/tests/fixtures/api/field/59.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int4", - "semantic_type": null, - "table_id": 12, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "raw_orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.170459Z", - "entity_name": null, - "active": true, - "id": 12, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "raw_orders", - "created_at": "2021-07-21T05:47:53.391873Z", - "points_of_interest": null - }, - "name": "user_id", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.214697Z", - "custom_position": 0, - "effective_type": "type/Integer", - "active": true, - "parent_id": null, - "id": 59, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 1, - "visibility_type": "normal", - "preview_display": true, - "display_name": "user_id", - "database_position": 1, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 62, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 25.875, - "q3": 69.625, - "max": 99.0, - "sd": 27.781341350472964, - "avg": 48.25252525252525 - } - } - }, - "created_at": "2021-07-21T05:47:53.494231Z", - "base_type": "type/Integer", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/60.json b/tests/fixtures/api/field/60.json deleted file mode 100644 index 99c5b1f..0000000 --- a/tests/fixtures/api/field/60.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int4", - "semantic_type": null, - "table_id": 11, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "raw_payments", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.173953Z", - "entity_name": null, - "active": true, - "id": 11, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "raw_payments", - "created_at": "2021-07-21T05:47:53.388179Z", - "points_of_interest": null - }, - "name": "order_id", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.247411Z", - "custom_position": 0, - "effective_type": "type/Integer", - "active": true, - "parent_id": null, - "id": 60, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 1, - "visibility_type": "normal", - "preview_display": true, - "display_name": "order_id", - "database_position": 1, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 99, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 24.904857366030992, - "q3": 75.25, - "max": 99.0, - "sd": 28.540193317267853, - "avg": 50.0353982300885 - } - } - }, - "created_at": "2021-07-21T05:47:53.506967Z", - "base_type": "type/Integer", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/61.json b/tests/fixtures/api/field/61.json deleted file mode 100644 index 7e1a37d..0000000 --- a/tests/fixtures/api/field/61.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "description": null, - "database_type": "text", - "semantic_type": "type/Category", - "table_id": 11, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "raw_payments", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.173953Z", - "entity_name": null, - "active": true, - "id": 11, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "raw_payments", - "created_at": "2021-07-21T05:47:53.388179Z", - "points_of_interest": null - }, - "name": "payment_method", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.217422Z", - "custom_position": 0, - "effective_type": "type/Text", - "active": true, - "parent_id": null, - "id": 61, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 2, - "visibility_type": "normal", - "preview_display": true, - "display_name": "payment_method", - "database_position": 2, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 4, - "nil%": 0.0 - }, - "type": { - "type/Text": { - "percent-json": 0.0, - "percent-url": 0.0, - "percent-email": 0.0, - "percent-state": 0.0, - "average-length": 10.79646017699115 - } - } - }, - "created_at": "2021-07-21T05:47:53.508887Z", - "base_type": "type/Text", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/62.json b/tests/fixtures/api/field/62.json deleted file mode 100644 index 0cd0029..0000000 --- a/tests/fixtures/api/field/62.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "description": null, - "database_type": "int4", - "semantic_type": "type/PK", - "table_id": 11, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "raw_payments", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.173953Z", - "entity_name": null, - "active": true, - "id": 11, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "raw_payments", - "created_at": "2021-07-21T05:47:53.388179Z", - "points_of_interest": null - }, - "name": "id", - "fingerprint_version": 5, - "has_field_values": "none", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.271155Z", - "custom_position": 0, - "effective_type": "type/Integer", - "active": true, - "parent_id": null, - "id": 62, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 0, - "visibility_type": "normal", - "preview_display": true, - "display_name": "id", - "database_position": 0, - "name_field": null, - "fingerprint": null, - "created_at": "2021-07-21T05:47:53.511724Z", - "base_type": "type/Integer", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/63.json b/tests/fixtures/api/field/63.json deleted file mode 100644 index be19ef3..0000000 --- a/tests/fixtures/api/field/63.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int4", - "semantic_type": "type/Category", - "table_id": 11, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "raw_payments", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.173953Z", - "entity_name": null, - "active": true, - "id": 11, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "raw_payments", - "created_at": "2021-07-21T05:47:53.388179Z", - "points_of_interest": null - }, - "name": "amount", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.273607Z", - "custom_position": 0, - "effective_type": "type/Integer", - "active": true, - "parent_id": null, - "id": 63, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 3, - "visibility_type": "normal", - "preview_display": true, - "display_name": "amount", - "database_position": 3, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 30, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 0.0, - "q1": 606.4037815689348, - "q3": 2278.791845139511, - "max": 3000.0, - "sd": 919.836873351873, - "avg": 1479.646017699115 - } - } - }, - "created_at": "2021-07-21T05:47:53.513727Z", - "base_type": "type/Integer", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/65.json b/tests/fixtures/api/field/65.json deleted file mode 100644 index 4111128..0000000 --- a/tests/fixtures/api/field/65.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int4", - "semantic_type": null, - "table_id": 8, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "stg_customers", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.176617Z", - "entity_name": null, - "active": true, - "id": 8, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "stg_customers", - "created_at": "2021-07-21T05:47:53.376525Z", - "points_of_interest": null - }, - "name": "customer_id", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.276108Z", - "custom_position": 0, - "effective_type": "type/Integer", - "active": true, - "parent_id": null, - "id": 65, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 0, - "visibility_type": "normal", - "preview_display": true, - "display_name": "customer_id", - "database_position": 0, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 100, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 25.5, - "q3": 75.5, - "max": 100.0, - "sd": 29.008358252146028, - "avg": 50.5 - } - } - }, - "created_at": "2021-07-21T05:47:53.528091Z", - "base_type": "type/Integer", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/68.json b/tests/fixtures/api/field/68.json deleted file mode 100644 index b936f0b..0000000 --- a/tests/fixtures/api/field/68.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int4", - "semantic_type": null, - "table_id": 5, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "stg_orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.179323Z", - "entity_name": null, - "active": true, - "id": 5, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "stg_orders", - "created_at": "2021-07-21T05:47:53.363321Z", - "points_of_interest": null - }, - "name": "order_id", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.225874Z", - "custom_position": 0, - "effective_type": "type/Integer", - "active": true, - "parent_id": null, - "id": 68, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 0, - "visibility_type": "normal", - "preview_display": true, - "display_name": "order_id", - "database_position": 0, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 99, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 25.25, - "q3": 74.75, - "max": 99.0, - "sd": 28.719704534890823, - "avg": 50.0 - } - } - }, - "created_at": "2021-07-21T05:47:53.545842Z", - "base_type": "type/Integer", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/69.json b/tests/fixtures/api/field/69.json deleted file mode 100644 index 0aad774..0000000 --- a/tests/fixtures/api/field/69.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "description": null, - "database_type": "text", - "semantic_type": "type/Category", - "table_id": 5, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "stg_orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.179323Z", - "entity_name": null, - "active": true, - "id": 5, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "stg_orders", - "created_at": "2021-07-21T05:47:53.363321Z", - "points_of_interest": null - }, - "name": "status", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.27984Z", - "custom_position": 0, - "effective_type": "type/Text", - "active": true, - "parent_id": null, - "id": 69, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 3, - "visibility_type": "normal", - "preview_display": true, - "display_name": "status", - "database_position": 3, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 5, - "nil%": 0.0 - }, - "type": { - "type/Text": { - "percent-json": 0.0, - "percent-url": 0.0, - "percent-email": 0.0, - "percent-state": 0.0, - "average-length": 8.404040404040405 - } - } - }, - "created_at": "2021-07-21T05:47:53.547849Z", - "base_type": "type/Text", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/72.json b/tests/fixtures/api/field/72.json deleted file mode 100644 index 3a05105..0000000 --- a/tests/fixtures/api/field/72.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "description": null, - "database_type": "text", - "semantic_type": "type/Category", - "table_id": 10, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "stg_payments", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.181929Z", - "entity_name": null, - "active": true, - "id": 10, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "stg_payments", - "created_at": "2021-07-21T05:47:53.384404Z", - "points_of_interest": null - }, - "name": "payment_method", - "fingerprint_version": 5, - "has_field_values": "list", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.236542Z", - "custom_position": 0, - "effective_type": "type/Text", - "active": true, - "parent_id": null, - "id": 72, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 2, - "visibility_type": "normal", - "preview_display": true, - "display_name": "payment_method", - "database_position": 2, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 4, - "nil%": 0.0 - }, - "type": { - "type/Text": { - "percent-json": 0.0, - "percent-url": 0.0, - "percent-email": 0.0, - "percent-state": 0.0, - "average-length": 10.79646017699115 - } - } - }, - "created_at": "2021-07-21T05:47:53.566146Z", - "base_type": "type/Text", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/field/74.json b/tests/fixtures/api/field/74.json deleted file mode 100644 index 9d212e8..0000000 --- a/tests/fixtures/api/field/74.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "description": null, - "database_type": "int4", - "semantic_type": null, - "table_id": 10, - "coercion_strategy": null, - "table": { - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "stg_payments", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.181929Z", - "entity_name": null, - "active": true, - "id": 10, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "stg_payments", - "created_at": "2021-07-21T05:47:53.384404Z", - "points_of_interest": null - }, - "name": "payment_id", - "fingerprint_version": 5, - "has_field_values": "none", - "settings": null, - "caveats": null, - "fk_target_field_id": null, - "dimensions": [], - "updated_at": "2021-07-21T07:30:35.191434Z", - "custom_position": 0, - "effective_type": "type/Integer", - "active": true, - "parent_id": null, - "id": 74, - "last_analyzed": "2021-07-21T05:47:54.560768Z", - "position": 0, - "visibility_type": "normal", - "preview_display": true, - "display_name": "payment_id", - "database_position": 0, - "name_field": null, - "fingerprint": { - "global": { - "distinct-count": 113, - "nil%": 0.0 - }, - "type": { - "type/Number": { - "min": 1.0, - "q1": 28.75, - "q3": 85.25, - "max": 113.0, - "sd": 32.76097144469315, - "avg": 57.0 - } - } - }, - "created_at": "2021-07-21T05:47:53.570339Z", - "base_type": "type/Integer", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/metric.json b/tests/fixtures/api/metric.json deleted file mode 100644 index 0637a08..0000000 --- a/tests/fixtures/api/metric.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/tests/fixtures/api/table.json b/tests/fixtures/api/table.json index 0f0a721..430cfd9 100644 --- a/tests/fixtures/api/table.json +++ b/tests/fixtures/api/table.json @@ -1,530 +1,850 @@ [ { - "description": null, + "description": "This table has basic information about a customer, as well as some derived facts based on a customer's orders", "entity_type": "entity/GenericTable", + "view_count": 2, "schema": "public", + "database_require_filter": null, "db": { + "uploads_schema_name": null, "description": null, "features": [ + "index-info", "full-join", + "window-functions/cumulative", "basic-aggregations", + "temporal-extract", + "actions/custom", + "window-functions/offset", + "now", + "convert-timezone", + "nested-field-columns", "standard-deviation-aggregations", + "test/jvm-timezone-setting", + "date-arithmetics", + "persist-models", + "actions", "expression-aggregations", "percentile-aggregations", + "connection-impersonation", "foreign-keys", + "table-privileges", "right-join", "left-join", "native-parameters", + "schemas", "nested-queries", "expressions", + "uploads", "set-timezone", "regex", "case-sensitivity-string-filter-options", "binning", + "metadata/key-constraints", + "datetime-diff", + "upload-with-auto-pk", "inner-join", - "advanced-math-expressions" + "advanced-math-expressions", + "fingerprint" ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", + "uploads_table_prefix": null, + "cache_field_values_schedule": "0 0 5 * * ? *", + "timezone": "Etc/UTC", "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", + "metadata_sync_schedule": "0 11 * * * ? *", + "name": "dbtmetabase", + "settings": null, "caveats": null, + "creator_id": 1, "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", + "updated_at": "2024-06-20T05:33:42.131951Z", + "cache_ttl": null, "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", "ssl": false, - "additional-options": null, - "tunnel-enabled": false + "password": "**MetabasePass**", + "port": 5432, + "advanced-options": false, + "schema-filters-type": "all", + "dbname": "dbtmetabase", + "host": "postgres", + "tunnel-enabled": false, + "user": "dbtmetabase" }, "is_sample": false, "id": 2, "is_on_demand": false, - "options": null, "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", + "initial_sync_status": "complete", + "is_audit": false, + "dbms_version": { + "flavor": "PostgreSQL", + "version": "16.1 (Debian 16.1-1.pgdg120+1)", + "semantic-version": [ + 16, + 1 + ] + }, + "uploads_enabled": false, + "refingerprint": false, + "created_at": "2024-06-19T11:49:38.313316Z", "points_of_interest": null }, "show_in_getting_started": false, - "name": "CUSTOMERS", + "name": "customers", "caveats": null, - "updated_at": "2021-07-21T07:30:35.159586Z", - "entity_name": null, + "updated_at": "2024-06-20T06:02:33.283724Z", "active": true, - "id": 7, + "id": 12, "db_id": 2, "visibility_type": null, - "field_order": "database", - "display_name": "customers", - "created_at": "2021-07-21T05:47:53.372467Z", + "field_order": "custom", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "clients", + "created_at": "2024-06-19T11:49:38.617718Z", + "estimated_row_count": 100, "points_of_interest": null }, { - "description": null, + "description": "This table has basic information about orders, as well as some derived facts based on payments", "entity_type": "entity/TransactionTable", + "view_count": 1, "schema": "public", + "database_require_filter": null, "db": { + "uploads_schema_name": null, "description": null, "features": [ + "index-info", "full-join", + "window-functions/cumulative", "basic-aggregations", + "temporal-extract", + "actions/custom", + "window-functions/offset", + "now", + "convert-timezone", + "nested-field-columns", "standard-deviation-aggregations", + "test/jvm-timezone-setting", + "date-arithmetics", + "persist-models", + "actions", "expression-aggregations", "percentile-aggregations", + "connection-impersonation", "foreign-keys", + "table-privileges", "right-join", "left-join", "native-parameters", + "schemas", "nested-queries", "expressions", + "uploads", "set-timezone", "regex", "case-sensitivity-string-filter-options", "binning", + "metadata/key-constraints", + "datetime-diff", + "upload-with-auto-pk", "inner-join", - "advanced-math-expressions" + "advanced-math-expressions", + "fingerprint" ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", + "uploads_table_prefix": null, + "cache_field_values_schedule": "0 0 5 * * ? *", + "timezone": "Etc/UTC", "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", + "metadata_sync_schedule": "0 11 * * * ? *", + "name": "dbtmetabase", + "settings": null, "caveats": null, + "creator_id": 1, "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", + "updated_at": "2024-06-20T05:33:42.131951Z", + "cache_ttl": null, "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", "ssl": false, - "additional-options": null, - "tunnel-enabled": false + "password": "**MetabasePass**", + "port": 5432, + "advanced-options": false, + "schema-filters-type": "all", + "dbname": "dbtmetabase", + "host": "postgres", + "tunnel-enabled": false, + "user": "dbtmetabase" }, "is_sample": false, "id": 2, "is_on_demand": false, - "options": null, "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", + "initial_sync_status": "complete", + "is_audit": false, + "dbms_version": { + "flavor": "PostgreSQL", + "version": "16.1 (Debian 16.1-1.pgdg120+1)", + "semantic-version": [ + 16, + 1 + ] + }, + "uploads_enabled": false, + "refingerprint": false, + "created_at": "2024-06-19T11:49:38.313316Z", "points_of_interest": null }, "show_in_getting_started": false, "name": "orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.162732Z", - "entity_name": null, + "caveats": "Some facts are derived from payments", + "updated_at": "2024-06-20T06:02:33.283724Z", "active": true, - "id": 6, + "id": 10, "db_id": 2, "visibility_type": null, - "field_order": "database", - "display_name": "orders", - "created_at": "2021-07-21T05:47:53.368244Z", - "points_of_interest": null + "field_order": "custom", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "Orders", + "created_at": "2024-06-19T11:49:38.600376Z", + "estimated_row_count": 99, + "points_of_interest": "Basic information only" }, { "description": null, "entity_type": "entity/GenericTable", + "view_count": 0, "schema": "public", + "database_require_filter": null, "db": { + "uploads_schema_name": null, "description": null, "features": [ + "index-info", "full-join", + "window-functions/cumulative", "basic-aggregations", + "temporal-extract", + "actions/custom", + "window-functions/offset", + "now", + "convert-timezone", + "nested-field-columns", "standard-deviation-aggregations", + "test/jvm-timezone-setting", + "date-arithmetics", + "persist-models", + "actions", "expression-aggregations", "percentile-aggregations", + "connection-impersonation", "foreign-keys", + "table-privileges", "right-join", "left-join", "native-parameters", + "schemas", "nested-queries", "expressions", + "uploads", "set-timezone", "regex", "case-sensitivity-string-filter-options", "binning", + "metadata/key-constraints", + "datetime-diff", + "upload-with-auto-pk", "inner-join", - "advanced-math-expressions" + "advanced-math-expressions", + "fingerprint" ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", + "uploads_table_prefix": null, + "cache_field_values_schedule": "0 0 5 * * ? *", + "timezone": "Etc/UTC", "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", + "metadata_sync_schedule": "0 11 * * * ? *", + "name": "dbtmetabase", + "settings": null, "caveats": null, + "creator_id": 1, "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", + "updated_at": "2024-06-20T05:33:42.131951Z", + "cache_ttl": null, "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", "ssl": false, - "additional-options": null, - "tunnel-enabled": false + "password": "**MetabasePass**", + "port": 5432, + "advanced-options": false, + "schema-filters-type": "all", + "dbname": "dbtmetabase", + "host": "postgres", + "tunnel-enabled": false, + "user": "dbtmetabase" }, "is_sample": false, "id": 2, "is_on_demand": false, - "options": null, "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", + "initial_sync_status": "complete", + "is_audit": false, + "dbms_version": { + "flavor": "PostgreSQL", + "version": "16.1 (Debian 16.1-1.pgdg120+1)", + "semantic-version": [ + 16, + 1 + ] + }, + "uploads_enabled": false, + "refingerprint": false, + "created_at": "2024-06-19T11:49:38.313316Z", "points_of_interest": null }, "show_in_getting_started": false, "name": "raw_customers", "caveats": null, - "updated_at": "2021-07-21T07:30:35.166218Z", - "entity_name": null, + "updated_at": "2024-06-20T06:02:33.283724Z", "active": true, - "id": 9, + "id": 13, "db_id": 2, "visibility_type": null, "field_order": "database", - "display_name": "raw_customers", - "created_at": "2021-07-21T05:47:53.380782Z", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "Raw Customers", + "created_at": "2024-06-19T11:49:38.633775Z", + "estimated_row_count": 100, "points_of_interest": null }, { "description": null, "entity_type": "entity/TransactionTable", + "view_count": 0, "schema": "public", + "database_require_filter": null, "db": { + "uploads_schema_name": null, "description": null, "features": [ + "index-info", "full-join", + "window-functions/cumulative", "basic-aggregations", + "temporal-extract", + "actions/custom", + "window-functions/offset", + "now", + "convert-timezone", + "nested-field-columns", "standard-deviation-aggregations", + "test/jvm-timezone-setting", + "date-arithmetics", + "persist-models", + "actions", "expression-aggregations", "percentile-aggregations", + "connection-impersonation", "foreign-keys", + "table-privileges", "right-join", "left-join", "native-parameters", + "schemas", "nested-queries", "expressions", + "uploads", "set-timezone", "regex", "case-sensitivity-string-filter-options", "binning", + "metadata/key-constraints", + "datetime-diff", + "upload-with-auto-pk", "inner-join", - "advanced-math-expressions" + "advanced-math-expressions", + "fingerprint" ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", + "uploads_table_prefix": null, + "cache_field_values_schedule": "0 0 5 * * ? *", + "timezone": "Etc/UTC", "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", + "metadata_sync_schedule": "0 11 * * * ? *", + "name": "dbtmetabase", + "settings": null, "caveats": null, + "creator_id": 1, "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", + "updated_at": "2024-06-20T05:33:42.131951Z", + "cache_ttl": null, "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", "ssl": false, - "additional-options": null, - "tunnel-enabled": false + "password": "**MetabasePass**", + "port": 5432, + "advanced-options": false, + "schema-filters-type": "all", + "dbname": "dbtmetabase", + "host": "postgres", + "tunnel-enabled": false, + "user": "dbtmetabase" }, "is_sample": false, "id": 2, "is_on_demand": false, - "options": null, "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", + "initial_sync_status": "complete", + "is_audit": false, + "dbms_version": { + "flavor": "PostgreSQL", + "version": "16.1 (Debian 16.1-1.pgdg120+1)", + "semantic-version": [ + 16, + 1 + ] + }, + "uploads_enabled": false, + "refingerprint": false, + "created_at": "2024-06-19T11:49:38.313316Z", "points_of_interest": null }, "show_in_getting_started": false, "name": "raw_orders", "caveats": null, - "updated_at": "2021-07-21T07:30:35.170459Z", - "entity_name": null, + "updated_at": "2024-06-20T06:02:33.283724Z", "active": true, - "id": 12, + "id": 14, "db_id": 2, "visibility_type": null, "field_order": "database", - "display_name": "raw_orders", - "created_at": "2021-07-21T05:47:53.391873Z", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "Raw Orders", + "created_at": "2024-06-19T11:49:38.648208Z", + "estimated_row_count": 99, "points_of_interest": null }, { "description": null, "entity_type": "entity/GenericTable", + "view_count": 0, "schema": "public", + "database_require_filter": null, "db": { + "uploads_schema_name": null, "description": null, "features": [ + "index-info", "full-join", + "window-functions/cumulative", "basic-aggregations", + "temporal-extract", + "actions/custom", + "window-functions/offset", + "now", + "convert-timezone", + "nested-field-columns", "standard-deviation-aggregations", + "test/jvm-timezone-setting", + "date-arithmetics", + "persist-models", + "actions", "expression-aggregations", "percentile-aggregations", + "connection-impersonation", "foreign-keys", + "table-privileges", "right-join", "left-join", "native-parameters", + "schemas", "nested-queries", "expressions", + "uploads", "set-timezone", "regex", "case-sensitivity-string-filter-options", "binning", + "metadata/key-constraints", + "datetime-diff", + "upload-with-auto-pk", "inner-join", - "advanced-math-expressions" + "advanced-math-expressions", + "fingerprint" ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", + "uploads_table_prefix": null, + "cache_field_values_schedule": "0 0 5 * * ? *", + "timezone": "Etc/UTC", "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", + "metadata_sync_schedule": "0 11 * * * ? *", + "name": "dbtmetabase", + "settings": null, "caveats": null, + "creator_id": 1, "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", + "updated_at": "2024-06-20T05:33:42.131951Z", + "cache_ttl": null, "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", "ssl": false, - "additional-options": null, - "tunnel-enabled": false + "password": "**MetabasePass**", + "port": 5432, + "advanced-options": false, + "schema-filters-type": "all", + "dbname": "dbtmetabase", + "host": "postgres", + "tunnel-enabled": false, + "user": "dbtmetabase" }, "is_sample": false, "id": 2, "is_on_demand": false, - "options": null, "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", + "initial_sync_status": "complete", + "is_audit": false, + "dbms_version": { + "flavor": "PostgreSQL", + "version": "16.1 (Debian 16.1-1.pgdg120+1)", + "semantic-version": [ + 16, + 1 + ] + }, + "uploads_enabled": false, + "refingerprint": false, + "created_at": "2024-06-19T11:49:38.313316Z", "points_of_interest": null }, "show_in_getting_started": false, "name": "raw_payments", "caveats": null, - "updated_at": "2021-07-21T07:30:35.173953Z", - "entity_name": null, + "updated_at": "2024-06-20T06:02:33.283724Z", "active": true, "id": 11, "db_id": 2, "visibility_type": null, "field_order": "database", - "display_name": "raw_payments", - "created_at": "2021-07-21T05:47:53.388179Z", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "Raw Payments", + "created_at": "2024-06-19T11:49:38.607177Z", + "estimated_row_count": 113, "points_of_interest": null }, { "description": null, "entity_type": "entity/GenericTable", + "view_count": 0, "schema": "public", + "database_require_filter": null, "db": { + "uploads_schema_name": null, "description": null, "features": [ + "index-info", "full-join", + "window-functions/cumulative", "basic-aggregations", + "temporal-extract", + "actions/custom", + "window-functions/offset", + "now", + "convert-timezone", + "nested-field-columns", "standard-deviation-aggregations", + "test/jvm-timezone-setting", + "date-arithmetics", + "persist-models", + "actions", "expression-aggregations", "percentile-aggregations", + "connection-impersonation", "foreign-keys", + "table-privileges", "right-join", "left-join", "native-parameters", + "schemas", "nested-queries", "expressions", + "uploads", "set-timezone", "regex", "case-sensitivity-string-filter-options", "binning", + "metadata/key-constraints", + "datetime-diff", + "upload-with-auto-pk", "inner-join", - "advanced-math-expressions" + "advanced-math-expressions", + "fingerprint" ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", + "uploads_table_prefix": null, + "cache_field_values_schedule": "0 0 5 * * ? *", + "timezone": "Etc/UTC", "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", + "metadata_sync_schedule": "0 11 * * * ? *", + "name": "dbtmetabase", + "settings": null, "caveats": null, + "creator_id": 1, "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", + "updated_at": "2024-06-20T05:33:42.131951Z", + "cache_ttl": null, "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", "ssl": false, - "additional-options": null, - "tunnel-enabled": false + "password": "**MetabasePass**", + "port": 5432, + "advanced-options": false, + "schema-filters-type": "all", + "dbname": "dbtmetabase", + "host": "postgres", + "tunnel-enabled": false, + "user": "dbtmetabase" }, "is_sample": false, "id": 2, "is_on_demand": false, - "options": null, "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", + "initial_sync_status": "complete", + "is_audit": false, + "dbms_version": { + "flavor": "PostgreSQL", + "version": "16.1 (Debian 16.1-1.pgdg120+1)", + "semantic-version": [ + 16, + 1 + ] + }, + "uploads_enabled": false, + "refingerprint": false, + "created_at": "2024-06-19T11:49:38.313316Z", "points_of_interest": null }, "show_in_getting_started": false, "name": "stg_customers", "caveats": null, - "updated_at": "2021-07-21T07:30:35.176617Z", - "entity_name": null, + "updated_at": "2024-06-20T06:02:33.283724Z", "active": true, - "id": 8, + "id": 16, "db_id": 2, "visibility_type": null, - "field_order": "database", - "display_name": "stg_customers", - "created_at": "2021-07-21T05:47:53.376525Z", + "field_order": "custom", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "Stg Customers", + "created_at": "2024-06-19T11:49:38.669615Z", + "estimated_row_count": null, "points_of_interest": null }, { "description": null, "entity_type": "entity/TransactionTable", + "view_count": 0, "schema": "public", + "database_require_filter": null, "db": { + "uploads_schema_name": null, "description": null, "features": [ + "index-info", "full-join", + "window-functions/cumulative", "basic-aggregations", + "temporal-extract", + "actions/custom", + "window-functions/offset", + "now", + "convert-timezone", + "nested-field-columns", "standard-deviation-aggregations", + "test/jvm-timezone-setting", + "date-arithmetics", + "persist-models", + "actions", "expression-aggregations", "percentile-aggregations", + "connection-impersonation", "foreign-keys", + "table-privileges", "right-join", "left-join", "native-parameters", + "schemas", "nested-queries", "expressions", + "uploads", "set-timezone", "regex", "case-sensitivity-string-filter-options", "binning", + "metadata/key-constraints", + "datetime-diff", + "upload-with-auto-pk", "inner-join", - "advanced-math-expressions" + "advanced-math-expressions", + "fingerprint" ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", + "uploads_table_prefix": null, + "cache_field_values_schedule": "0 0 5 * * ? *", + "timezone": "Etc/UTC", "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", + "metadata_sync_schedule": "0 11 * * * ? *", + "name": "dbtmetabase", + "settings": null, "caveats": null, + "creator_id": 1, "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", + "updated_at": "2024-06-20T05:33:42.131951Z", + "cache_ttl": null, "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", "ssl": false, - "additional-options": null, - "tunnel-enabled": false + "password": "**MetabasePass**", + "port": 5432, + "advanced-options": false, + "schema-filters-type": "all", + "dbname": "dbtmetabase", + "host": "postgres", + "tunnel-enabled": false, + "user": "dbtmetabase" }, "is_sample": false, "id": 2, "is_on_demand": false, - "options": null, "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", + "initial_sync_status": "complete", + "is_audit": false, + "dbms_version": { + "flavor": "PostgreSQL", + "version": "16.1 (Debian 16.1-1.pgdg120+1)", + "semantic-version": [ + 16, + 1 + ] + }, + "uploads_enabled": false, + "refingerprint": false, + "created_at": "2024-06-19T11:49:38.313316Z", "points_of_interest": null }, "show_in_getting_started": false, "name": "stg_orders", "caveats": null, - "updated_at": "2021-07-21T07:30:35.179323Z", - "entity_name": null, + "updated_at": "2024-06-20T06:02:33.283724Z", "active": true, - "id": 5, + "id": 15, "db_id": 2, "visibility_type": null, - "field_order": "database", - "display_name": "stg_orders", - "created_at": "2021-07-21T05:47:53.363321Z", + "field_order": "custom", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "Stg Orders", + "created_at": "2024-06-19T11:49:38.659111Z", + "estimated_row_count": null, "points_of_interest": null }, { "description": null, "entity_type": "entity/GenericTable", + "view_count": 0, "schema": "public", + "database_require_filter": null, "db": { + "uploads_schema_name": null, "description": null, "features": [ + "index-info", "full-join", + "window-functions/cumulative", "basic-aggregations", + "temporal-extract", + "actions/custom", + "window-functions/offset", + "now", + "convert-timezone", + "nested-field-columns", "standard-deviation-aggregations", + "test/jvm-timezone-setting", + "date-arithmetics", + "persist-models", + "actions", "expression-aggregations", "percentile-aggregations", + "connection-impersonation", "foreign-keys", + "table-privileges", "right-join", "left-join", "native-parameters", + "schemas", "nested-queries", "expressions", + "uploads", "set-timezone", "regex", "case-sensitivity-string-filter-options", "binning", + "metadata/key-constraints", + "datetime-diff", + "upload-with-auto-pk", "inner-join", - "advanced-math-expressions" + "advanced-math-expressions", + "fingerprint" ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", + "uploads_table_prefix": null, + "cache_field_values_schedule": "0 0 5 * * ? *", + "timezone": "Etc/UTC", "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", + "metadata_sync_schedule": "0 11 * * * ? *", + "name": "dbtmetabase", + "settings": null, "caveats": null, + "creator_id": 1, "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", + "updated_at": "2024-06-20T05:33:42.131951Z", + "cache_ttl": null, "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", "ssl": false, - "additional-options": null, - "tunnel-enabled": false + "password": "**MetabasePass**", + "port": 5432, + "advanced-options": false, + "schema-filters-type": "all", + "dbname": "dbtmetabase", + "host": "postgres", + "tunnel-enabled": false, + "user": "dbtmetabase" }, "is_sample": false, "id": 2, "is_on_demand": false, - "options": null, "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", + "initial_sync_status": "complete", + "is_audit": false, + "dbms_version": { + "flavor": "PostgreSQL", + "version": "16.1 (Debian 16.1-1.pgdg120+1)", + "semantic-version": [ + 16, + 1 + ] + }, + "uploads_enabled": false, + "refingerprint": false, + "created_at": "2024-06-19T11:49:38.313316Z", "points_of_interest": null }, "show_in_getting_started": false, "name": "stg_payments", "caveats": null, - "updated_at": "2021-07-21T07:30:35.181929Z", - "entity_name": null, + "updated_at": "2024-06-20T06:02:33.283724Z", "active": true, - "id": 10, + "id": 9, "db_id": 2, "visibility_type": null, - "field_order": "database", - "display_name": "stg_payments", - "created_at": "2021-07-21T05:47:53.384404Z", + "field_order": "custom", + "is_upload": false, + "initial_sync_status": "complete", + "display_name": "Stg Payments", + "created_at": "2024-06-19T11:49:38.586822Z", + "estimated_row_count": null, "points_of_interest": null } ] \ No newline at end of file diff --git a/tests/fixtures/api/table/10.json b/tests/fixtures/api/table/10.json deleted file mode 100644 index e9b877d..0000000 --- a/tests/fixtures/api/table/10.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "stg_payments", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.181929Z", - "pk_field": null, - "entity_name": null, - "active": true, - "id": 10, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "stg_payments", - "created_at": "2021-07-21T05:47:53.384404Z", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/table/11.json b/tests/fixtures/api/table/11.json deleted file mode 100644 index c05ca64..0000000 --- a/tests/fixtures/api/table/11.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "raw_payments", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.173953Z", - "pk_field": 62, - "entity_name": null, - "active": true, - "id": 11, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "raw_payments", - "created_at": "2021-07-21T05:47:53.388179Z", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/table/12.json b/tests/fixtures/api/table/12.json deleted file mode 100644 index dcb5343..0000000 --- a/tests/fixtures/api/table/12.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "raw_orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.170459Z", - "pk_field": 57, - "entity_name": null, - "active": true, - "id": 12, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "raw_orders", - "created_at": "2021-07-21T05:47:53.391873Z", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/table/5.json b/tests/fixtures/api/table/5.json deleted file mode 100644 index f4b9d2a..0000000 --- a/tests/fixtures/api/table/5.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "stg_orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.179323Z", - "pk_field": null, - "entity_name": null, - "active": true, - "id": 5, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "stg_orders", - "created_at": "2021-07-21T05:47:53.363321Z", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/table/6.json b/tests/fixtures/api/table/6.json deleted file mode 100644 index fb10e64..0000000 --- a/tests/fixtures/api/table/6.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "description": null, - "entity_type": "entity/TransactionTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "orders", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.162732Z", - "pk_field": null, - "entity_name": null, - "active": true, - "id": 6, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "orders", - "created_at": "2021-07-21T05:47:53.368244Z", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/table/7.json b/tests/fixtures/api/table/7.json deleted file mode 100644 index 3c0e945..0000000 --- a/tests/fixtures/api/table/7.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "customers", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.159586Z", - "pk_field": null, - "entity_name": null, - "active": true, - "id": 7, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "customers", - "created_at": "2021-07-21T05:47:53.372467Z", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/table/8.json b/tests/fixtures/api/table/8.json deleted file mode 100644 index 4198160..0000000 --- a/tests/fixtures/api/table/8.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "stg_customers", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.176617Z", - "pk_field": null, - "entity_name": null, - "active": true, - "id": 8, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "stg_customers", - "created_at": "2021-07-21T05:47:53.376525Z", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/table/9.json b/tests/fixtures/api/table/9.json deleted file mode 100644 index 77dddbc..0000000 --- a/tests/fixtures/api/table/9.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "description": null, - "entity_type": "entity/GenericTable", - "schema": "public", - "db": { - "description": null, - "features": [ - "full-join", - "basic-aggregations", - "standard-deviation-aggregations", - "expression-aggregations", - "percentile-aggregations", - "foreign-keys", - "right-join", - "left-join", - "native-parameters", - "nested-queries", - "expressions", - "set-timezone", - "regex", - "case-sensitivity-string-filter-options", - "binning", - "inner-join", - "advanced-math-expressions" - ], - "cache_field_values_schedule": "0 0 22 * * ? *", - "timezone": "UTC", - "auto_run_queries": true, - "metadata_sync_schedule": "0 46 * * * ? *", - "name": "unit_testing", - "caveats": null, - "is_full_sync": true, - "updated_at": "2021-07-21T07:05:13.699978Z", - "details": { - "host": "postgres", - "port": null, - "dbname": "test", - "user": "postgres", - "password": "**MetabasePass**", - "ssl": false, - "additional-options": null, - "tunnel-enabled": false - }, - "is_sample": false, - "id": 2, - "is_on_demand": false, - "options": null, - "engine": "postgres", - "refingerprint": null, - "created_at": "2021-07-21T05:38:53.637091Z", - "points_of_interest": null - }, - "show_in_getting_started": false, - "name": "raw_customers", - "caveats": null, - "updated_at": "2021-07-21T07:30:35.166218Z", - "pk_field": 55, - "entity_name": null, - "active": true, - "id": 9, - "db_id": 2, - "visibility_type": null, - "field_order": "database", - "display_name": "raw_customers", - "created_at": "2021-07-21T05:47:53.380782Z", - "points_of_interest": null -} \ No newline at end of file diff --git a/tests/fixtures/api/user.json b/tests/fixtures/api/user.json deleted file mode 100644 index 5f6cb95..0000000 --- a/tests/fixtures/api/user.json +++ /dev/null @@ -1,24 +0,0 @@ -[ - { - "email": "user@example.com", - "ldap_auth": false, - "first_name": "dbtmetabase", - "locale": null, - "last_login": "2021-07-21T19:25:28.6083Z", - "is_active": true, - "is_qbnewb": false, - "updated_at": "2021-07-21T19:25:28.6083", - "group_ids": [ - 1, - 2 - ], - "is_superuser": true, - "login_attributes": null, - "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "personal_collection_id": 1, - "common_name": "dbtmetabase", - "google_auth": false - } -] \ No newline at end of file diff --git a/tests/fixtures/api/user/1.json b/tests/fixtures/api/user/1.json index 907c5be..f49fde9 100644 --- a/tests/fixtures/api/user/1.json +++ b/tests/fixtures/api/user/1.json @@ -1,21 +1,24 @@ { - "email": "user@example.com", - "ldap_auth": false, + "email": "dbtmetabase@example.com", "first_name": "dbtmetabase", "locale": null, - "last_login": "2021-07-21T19:25:28.6083Z", + "last_login": "2024-06-20T06:03:33.519227Z", "is_active": true, - "is_qbnewb": false, - "updated_at": "2021-07-21T19:25:28.6083", - "group_ids": [ - 1, - 2 + "user_group_memberships": [ + { + "id": 1 + }, + { + "id": 2 + } ], + "is_qbnewb": false, + "updated_at": "2024-06-20T06:03:33.519227Z", "is_superuser": true, "login_attributes": null, "id": 1, - "last_name": "", - "date_joined": "2021-07-21T05:38:53.637091Z", - "common_name": "dbtmetabase", - "google_auth": false + "last_name": null, + "date_joined": "2024-06-19T11:49:37.507897Z", + "sso_source": null, + "common_name": "dbtmetabase" } \ No newline at end of file diff --git a/tests/fixtures/exposure/collection/a_look_at_your_customers_table.yml b/tests/fixtures/exposure/collection/a_look_at_your_customers_table.yml deleted file mode 100644 index 4cb66bf..0000000 --- a/tests/fixtures/exposure/collection/a_look_at_your_customers_table.yml +++ /dev/null @@ -1,370 +0,0 @@ -version: 2 -exposures: - - name: a_look_at_your_customers_table - label: A look at your customers table - description: '### Dashboard Cards: 18 - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __1__ - - - Created On: __2021-07-21T08:01:37.328519Z__' - type: dashboard - url: http://localhost:3000/dashboard/1 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: customer_lifetime_value_over_time - label: Customer_lifetime_value over time - description: '### Visualization: Line - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __11__ - - - Created On: __2021-07-21T08:01:38.52841Z__' - type: analysis - url: http://localhost:3000/card/11 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: customer_lifetime_value_over_time_1 - label: Customer_lifetime_value over time - description: '### Visualization: Line - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __9__ - - - Created On: __2021-07-21T08:01:38.189846Z__' - type: analysis - url: http://localhost:3000/card/9 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: customers_added_in_the_last_30_days - label: Customers added in the last 30 days - description: '### Visualization: Scalar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __4__ - - - Created On: __2021-07-21T08:01:37.535187Z__' - type: analysis - url: http://localhost:3000/card/4 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: customers_added_in_the_last_30_days_1 - label: Customers added in the last 30 days - description: '### Visualization: Scalar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __5__ - - - Created On: __2021-07-21T08:01:37.630969Z__' - type: analysis - url: http://localhost:3000/card/5 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: customers_by_customer_lifetime_value - label: Customers by customer_lifetime_value - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __7__ - - - Created On: __2021-07-21T08:01:37.858387Z__' - type: analysis - url: http://localhost:3000/card/7 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: customers_by_number_of_orders - label: Customers by number_of_orders - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __6__ - - - Created On: __2021-07-21T08:01:37.754606Z__' - type: analysis - url: http://localhost:3000/card/6 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: number_of_orders_over_time - label: Number_of_orders over time - description: '### Visualization: Line - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __8__ - - - Created On: __2021-07-21T08:01:38.016244Z__' - type: analysis - url: http://localhost:3000/card/8 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: number_of_orders_over_time_1 - label: Number_of_orders over time - description: '### Visualization: Line - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __10__ - - - Created On: __2021-07-21T08:01:38.347535Z__' - type: analysis - url: http://localhost:3000/card/10 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: timestamp_by_day_of_the_week - label: Timestamp by day of the week - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __12__ - - - Created On: __2021-07-21T08:01:38.662485Z__' - type: analysis - url: http://localhost:3000/card/12 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: timestamp_by_day_of_the_week_1 - label: Timestamp by day of the week - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __13__ - - - Created On: __2021-07-21T08:01:38.808186Z__' - type: analysis - url: http://localhost:3000/card/13 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: timestamp_by_month_of_the_year - label: Timestamp by month of the year - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __15__ - - - Created On: __2021-07-21T08:01:39.084258Z__' - type: analysis - url: http://localhost:3000/card/15 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: timestamp_by_month_of_the_year_1 - label: Timestamp by month of the year - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __14__ - - - Created On: __2021-07-21T08:01:38.938688Z__' - type: analysis - url: http://localhost:3000/card/14 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: timestamp_by_quarter_of_the_year - label: Timestamp by quarter of the year - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __17__ - - - Created On: __2021-07-21T08:01:39.371067Z__' - type: analysis - url: http://localhost:3000/card/17 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: timestamp_by_quarter_of_the_year_1 - label: Timestamp by quarter of the year - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __16__ - - - Created On: __2021-07-21T08:01:39.228965Z__' - type: analysis - url: http://localhost:3000/card/16 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: total_customers - label: Total customers - description: '### Visualization: Scalar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __3__ - - - Created On: __2021-07-21T08:01:37.434243Z__' - type: analysis - url: http://localhost:3000/card/3 - maturity: medium - owner: - name: '' - email: '' - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/collection/our_analytics.yml b/tests/fixtures/exposure/collection/our_analytics.yml index cc17be7..f312f85 100644 --- a/tests/fixtures/exposure/collection/our_analytics.yml +++ b/tests/fixtures/exposure/collection/our_analytics.yml @@ -1,54 +1,109 @@ version: 2 exposures: - - name: customers__sum_of_number_of_orders_and_average_of_number_of_orders__grouped_by_most_recent_order__day_ - label: Customers, Sum of Number Of Orders and Average of Number Of Orders, Grouped - by Most Recent Order (day) - description: '### Visualization: Line + - name: completed_orders_cte_sql + label: Completed Orders CTE SQL + description: "### Visualization: Table\n\nCTE SQL\n\n#### Query\n\n```\nwith completed_orders\ + \ as (\n select * from Orders where status = 'completed'\n)\nselect * from\ + \ completed_orders\n```\n\n#### Metadata\n\nMetabase ID: __32__\n\nCreated On:\ + \ __2024-06-20T06:01:34.470497Z__" + type: analysis + url: http://localhost:3000/card/32 + maturity: medium + owner: + name: dbtmetabase + email: dbtmetabase@example.com + depends_on: + - ref('orders') + - name: dummy + label: Dummy + description: '### Visualization: Table - No description provided in Metabase + Dummy 1 + + + #### Query + + + ``` + + select 1; + + ``` #### Metadata - Metabase ID: __1__ + Metabase ID: __30__ - Created On: __2021-07-21T08:00:47.453351Z__' + Created On: __2024-06-20T05:56:33.051625Z__' type: analysis - url: http://localhost:3000/card/1 + url: http://localhost:3000/card/30 maturity: medium owner: name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: orders__count - label: Orders, Count - description: '### Visualization: Scalar + email: dbtmetabase@example.com + depends_on: [] + - name: dummy_1 + label: Dummy + description: '### Visualization: Table + + + Dummy 2 + + #### Query - Nice KPI + + ``` + + select 2; + + ``` #### Metadata - Metabase ID: __2__ + Metabase ID: __31__ - Created On: __2021-07-21T08:01:14.290572Z__' + Created On: __2024-06-20T05:56:45.033599Z__' type: analysis - url: http://localhost:3000/card/2 + url: http://localhost:3000/card/31 maturity: medium owner: name: dbtmetabase - email: user@example.com + email: dbtmetabase@example.com + depends_on: [] + - name: orders___customers + label: Orders + Customers + description: '### Visualization: Table + + + Orders and customers + + + #### Metadata + + + Metabase ID: __27__ + + + Created On: __2024-06-19T11:57:35.85999Z__' + type: analysis + url: http://localhost:3000/card/27 + maturity: medium + owner: + name: dbtmetabase + email: dbtmetabase@example.com depends_on: + - ref('customers') - ref('orders') - - name: orders_customers - label: Orders Customers + - name: orders___customers__filtered_by_status_is_completed + label: Orders + Customers, Filtered by Status is completed description: '### Visualization: Table @@ -58,38 +113,57 @@ exposures: #### Metadata - Metabase ID: __23__ + Metabase ID: __28__ - Created On: __2024-01-26T23:34:25.436685__' + Created On: __2024-06-19T11:58:35.060527Z__' type: analysis - url: http://localhost:3000/card/23 + url: http://localhost:3000/card/28 maturity: medium owner: name: dbtmetabase email: dbtmetabase@example.com depends_on: + - ref('customers') + - ref('orders') + - name: returned_order_count_sql + label: Returned Order Count SQL + description: "### Visualization: Scalar\n\nNo description provided in Metabase\n\ + \n#### Query\n\n```\nselect\n count(*)\nfrom STG_payments as p\n left\ + \ join STG_orders as o on p.order_id = o.order_id\nwhere o.status = 'returned'\n\ + ;\n```\n\n#### Metadata\n\nMetabase ID: __29__\n\nCreated On: __2024-06-19T12:03:01.905927Z__" + type: analysis + url: http://localhost:3000/card/29 + maturity: medium + owner: + name: dbtmetabase + email: dbtmetabase@example.com + depends_on: + - ref('stg_orders') - ref('stg_payments') - - name: orders_customers_filtered - label: Orders Customers Filtered - description: '### Visualization: Table + - name: the_dashboard + label: The Dashboard + description: '### Dashboard Cards: 3 - No description provided in Metabase + Dashboard is a dashboard is a dashboard #### Metadata - Metabase ID: __24__ + Metabase ID: __2__ - Created On: __2024-01-26T23:35:08.864176__' - type: analysis - url: http://localhost:3000/card/24 + Created On: __2024-06-19T11:57:43.675681Z__' + type: dashboard + url: http://localhost:3000/dashboard/2 maturity: medium owner: name: dbtmetabase email: dbtmetabase@example.com depends_on: - ref('customers') + - ref('orders') + - ref('stg_orders') + - ref('stg_payments') diff --git a/tests/fixtures/exposure/default/exposures.yml b/tests/fixtures/exposure/default/exposures.yml index 65a7743..f312f85 100644 --- a/tests/fixtures/exposure/default/exposures.yml +++ b/tests/fixtures/exposure/default/exposures.yml @@ -1,216 +1,110 @@ version: 2 exposures: - - name: a_look_at_your_customers_table - label: A look at your customers table - description: '### Dashboard Cards: 18 - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __1__ - - - Created On: __2021-07-21T08:01:37.328519Z__' - type: dashboard - url: http://localhost:3000/dashboard/1 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: customer_lifetime_value_over_time - label: Customer_lifetime_value over time - description: '### Visualization: Line - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __11__ - - - Created On: __2021-07-21T08:01:38.52841Z__' + - name: completed_orders_cte_sql + label: Completed Orders CTE SQL + description: "### Visualization: Table\n\nCTE SQL\n\n#### Query\n\n```\nwith completed_orders\ + \ as (\n select * from Orders where status = 'completed'\n)\nselect * from\ + \ completed_orders\n```\n\n#### Metadata\n\nMetabase ID: __32__\n\nCreated On:\ + \ __2024-06-20T06:01:34.470497Z__" type: analysis - url: http://localhost:3000/card/11 + url: http://localhost:3000/card/32 maturity: medium owner: name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: customer_lifetime_value_over_time_1 - label: Customer_lifetime_value over time - description: '### Visualization: Line - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __9__ - - - Created On: __2021-07-21T08:01:38.189846Z__' - type: analysis - url: http://localhost:3000/card/9 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: customers__sum_of_number_of_orders_and_average_of_number_of_orders__grouped_by_most_recent_order__day_ - label: Customers, Sum of Number Of Orders and Average of Number Of Orders, Grouped - by Most Recent Order (day) - description: '### Visualization: Line - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __1__ - - - Created On: __2021-07-21T08:00:47.453351Z__' - type: analysis - url: http://localhost:3000/card/1 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com + email: dbtmetabase@example.com depends_on: - - ref('customers') - - name: customers_added_in_the_last_30_days - label: Customers added in the last 30 days - description: '### Visualization: Scalar - + - ref('orders') + - name: dummy + label: Dummy + description: '### Visualization: Table - No description provided in Metabase + Dummy 1 - #### Metadata + #### Query - Metabase ID: __4__ + ``` - Created On: __2021-07-21T08:01:37.535187Z__' - type: analysis - url: http://localhost:3000/card/4 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: customers_added_in_the_last_30_days_1 - label: Customers added in the last 30 days - description: '### Visualization: Scalar + select 1; - - No description provided in Metabase + ``` #### Metadata - Metabase ID: __5__ + Metabase ID: __30__ - Created On: __2021-07-21T08:01:37.630969Z__' + Created On: __2024-06-20T05:56:33.051625Z__' type: analysis - url: http://localhost:3000/card/5 + url: http://localhost:3000/card/30 maturity: medium owner: name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: customers_by_customer_lifetime_value - label: Customers by customer_lifetime_value - description: '### Visualization: Bar - + email: dbtmetabase@example.com + depends_on: [] + - name: dummy_1 + label: Dummy + description: '### Visualization: Table - No description provided in Metabase + Dummy 2 - #### Metadata + #### Query - Metabase ID: __7__ + ``` - Created On: __2021-07-21T08:01:37.858387Z__' - type: analysis - url: http://localhost:3000/card/7 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: customers_by_number_of_orders - label: Customers by number_of_orders - description: '### Visualization: Bar + select 2; - - No description provided in Metabase + ``` #### Metadata - Metabase ID: __6__ + Metabase ID: __31__ - Created On: __2021-07-21T08:01:37.754606Z__' + Created On: __2024-06-20T05:56:45.033599Z__' type: analysis - url: http://localhost:3000/card/6 + url: http://localhost:3000/card/31 maturity: medium owner: name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: number_of_orders_over_time - label: Number_of_orders over time - description: '### Visualization: Line + email: dbtmetabase@example.com + depends_on: [] + - name: orders___customers + label: Orders + Customers + description: '### Visualization: Table - No description provided in Metabase + Orders and customers #### Metadata - Metabase ID: __8__ + Metabase ID: __27__ - Created On: __2021-07-21T08:01:38.016244Z__' + Created On: __2024-06-19T11:57:35.85999Z__' type: analysis - url: http://localhost:3000/card/8 + url: http://localhost:3000/card/27 maturity: medium owner: name: dbtmetabase - email: user@example.com + email: dbtmetabase@example.com depends_on: - ref('customers') - - name: number_of_orders_over_time_1 - label: Number_of_orders over time - description: '### Visualization: Line + - ref('orders') + - name: orders___customers__filtered_by_status_is_completed + label: Orders + Customers, Filtered by Status is completed + description: '### Visualization: Table No description provided in Metabase @@ -219,245 +113,57 @@ exposures: #### Metadata - Metabase ID: __10__ + Metabase ID: __28__ - Created On: __2021-07-21T08:01:38.347535Z__' + Created On: __2024-06-19T11:58:35.060527Z__' type: analysis - url: http://localhost:3000/card/10 + url: http://localhost:3000/card/28 maturity: medium owner: name: dbtmetabase - email: user@example.com + email: dbtmetabase@example.com depends_on: - ref('customers') - - name: orders__count - label: Orders, Count - description: '### Visualization: Scalar - - - Nice KPI - - - #### Metadata - - - Metabase ID: __2__ - - - Created On: __2021-07-21T08:01:14.290572Z__' - type: analysis - url: http://localhost:3000/card/2 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - ref('orders') - - name: orders_customers - label: Orders Customers - description: '### Visualization: Table - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __23__ - - - Created On: __2024-01-26T23:34:25.436685__' + - name: returned_order_count_sql + label: Returned Order Count SQL + description: "### Visualization: Scalar\n\nNo description provided in Metabase\n\ + \n#### Query\n\n```\nselect\n count(*)\nfrom STG_payments as p\n left\ + \ join STG_orders as o on p.order_id = o.order_id\nwhere o.status = 'returned'\n\ + ;\n```\n\n#### Metadata\n\nMetabase ID: __29__\n\nCreated On: __2024-06-19T12:03:01.905927Z__" type: analysis - url: http://localhost:3000/card/23 + url: http://localhost:3000/card/29 maturity: medium owner: name: dbtmetabase email: dbtmetabase@example.com depends_on: + - ref('stg_orders') - ref('stg_payments') - - name: orders_customers_filtered - label: Orders Customers Filtered - description: '### Visualization: Table + - name: the_dashboard + label: The Dashboard + description: '### Dashboard Cards: 3 - No description provided in Metabase + Dashboard is a dashboard is a dashboard #### Metadata - Metabase ID: __24__ + Metabase ID: __2__ - Created On: __2024-01-26T23:35:08.864176__' - type: analysis - url: http://localhost:3000/card/24 + Created On: __2024-06-19T11:57:43.675681Z__' + type: dashboard + url: http://localhost:3000/dashboard/2 maturity: medium owner: name: dbtmetabase email: dbtmetabase@example.com depends_on: - ref('customers') - - name: timestamp_by_day_of_the_week - label: Timestamp by day of the week - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __12__ - - - Created On: __2021-07-21T08:01:38.662485Z__' - type: analysis - url: http://localhost:3000/card/12 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: timestamp_by_day_of_the_week_1 - label: Timestamp by day of the week - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __13__ - - - Created On: __2021-07-21T08:01:38.808186Z__' - type: analysis - url: http://localhost:3000/card/13 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: timestamp_by_month_of_the_year - label: Timestamp by month of the year - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __15__ - - - Created On: __2021-07-21T08:01:39.084258Z__' - type: analysis - url: http://localhost:3000/card/15 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: timestamp_by_month_of_the_year_1 - label: Timestamp by month of the year - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __14__ - - - Created On: __2021-07-21T08:01:38.938688Z__' - type: analysis - url: http://localhost:3000/card/14 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: timestamp_by_quarter_of_the_year - label: Timestamp by quarter of the year - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __17__ - - - Created On: __2021-07-21T08:01:39.371067Z__' - type: analysis - url: http://localhost:3000/card/17 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: timestamp_by_quarter_of_the_year_1 - label: Timestamp by quarter of the year - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __16__ - - - Created On: __2021-07-21T08:01:39.228965Z__' - type: analysis - url: http://localhost:3000/card/16 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') - - name: total_customers - label: Total customers - description: '### Visualization: Scalar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __3__ - - - Created On: __2021-07-21T08:01:37.434243Z__' - type: analysis - url: http://localhost:3000/card/3 - maturity: medium - owner: - name: '' - email: '' - depends_on: - - ref('customers') + - ref('orders') + - ref('stg_orders') + - ref('stg_payments') diff --git a/tests/fixtures/exposure/type/card/1.yml b/tests/fixtures/exposure/type/card/1.yml deleted file mode 100644 index 97f9154..0000000 --- a/tests/fixtures/exposure/type/card/1.yml +++ /dev/null @@ -1,26 +0,0 @@ -version: 2 -exposures: - - name: customers__sum_of_number_of_orders_and_average_of_number_of_orders__grouped_by_most_recent_order__day_ - label: Customers, Sum of Number Of Orders and Average of Number Of Orders, Grouped - by Most Recent Order (day) - description: '### Visualization: Line - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __1__ - - - Created On: __2021-07-21T08:00:47.453351Z__' - type: analysis - url: http://localhost:3000/card/1 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/card/10.yml b/tests/fixtures/exposure/type/card/10.yml deleted file mode 100644 index 4ce71e3..0000000 --- a/tests/fixtures/exposure/type/card/10.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: number_of_orders_over_time_1 - label: Number_of_orders over time - description: '### Visualization: Line - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __10__ - - - Created On: __2021-07-21T08:01:38.347535Z__' - type: analysis - url: http://localhost:3000/card/10 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/card/11.yml b/tests/fixtures/exposure/type/card/11.yml deleted file mode 100644 index b3af317..0000000 --- a/tests/fixtures/exposure/type/card/11.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: customer_lifetime_value_over_time - label: Customer_lifetime_value over time - description: '### Visualization: Line - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __11__ - - - Created On: __2021-07-21T08:01:38.52841Z__' - type: analysis - url: http://localhost:3000/card/11 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/card/12.yml b/tests/fixtures/exposure/type/card/12.yml deleted file mode 100644 index f0a8c15..0000000 --- a/tests/fixtures/exposure/type/card/12.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: timestamp_by_day_of_the_week - label: Timestamp by day of the week - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __12__ - - - Created On: __2021-07-21T08:01:38.662485Z__' - type: analysis - url: http://localhost:3000/card/12 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/card/13.yml b/tests/fixtures/exposure/type/card/13.yml deleted file mode 100644 index f4d781c..0000000 --- a/tests/fixtures/exposure/type/card/13.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: timestamp_by_day_of_the_week_1 - label: Timestamp by day of the week - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __13__ - - - Created On: __2021-07-21T08:01:38.808186Z__' - type: analysis - url: http://localhost:3000/card/13 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/card/14.yml b/tests/fixtures/exposure/type/card/14.yml deleted file mode 100644 index 677577c..0000000 --- a/tests/fixtures/exposure/type/card/14.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: timestamp_by_month_of_the_year_1 - label: Timestamp by month of the year - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __14__ - - - Created On: __2021-07-21T08:01:38.938688Z__' - type: analysis - url: http://localhost:3000/card/14 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/card/15.yml b/tests/fixtures/exposure/type/card/15.yml deleted file mode 100644 index 52b6e21..0000000 --- a/tests/fixtures/exposure/type/card/15.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: timestamp_by_month_of_the_year - label: Timestamp by month of the year - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __15__ - - - Created On: __2021-07-21T08:01:39.084258Z__' - type: analysis - url: http://localhost:3000/card/15 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/card/16.yml b/tests/fixtures/exposure/type/card/16.yml deleted file mode 100644 index 42cacd7..0000000 --- a/tests/fixtures/exposure/type/card/16.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: timestamp_by_quarter_of_the_year_1 - label: Timestamp by quarter of the year - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __16__ - - - Created On: __2021-07-21T08:01:39.228965Z__' - type: analysis - url: http://localhost:3000/card/16 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/card/17.yml b/tests/fixtures/exposure/type/card/17.yml deleted file mode 100644 index 0179970..0000000 --- a/tests/fixtures/exposure/type/card/17.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: timestamp_by_quarter_of_the_year - label: Timestamp by quarter of the year - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __17__ - - - Created On: __2021-07-21T08:01:39.371067Z__' - type: analysis - url: http://localhost:3000/card/17 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/card/2.yml b/tests/fixtures/exposure/type/card/2.yml deleted file mode 100644 index 9547d4b..0000000 --- a/tests/fixtures/exposure/type/card/2.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: orders__count - label: Orders, Count - description: '### Visualization: Scalar - - - Nice KPI - - - #### Metadata - - - Metabase ID: __2__ - - - Created On: __2021-07-21T08:01:14.290572Z__' - type: analysis - url: http://localhost:3000/card/2 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('orders') diff --git a/tests/fixtures/exposure/type/card/27.yml b/tests/fixtures/exposure/type/card/27.yml new file mode 100644 index 0000000..4bb4813 --- /dev/null +++ b/tests/fixtures/exposure/type/card/27.yml @@ -0,0 +1,26 @@ +version: 2 +exposures: + - name: orders___customers + label: Orders + Customers + description: '### Visualization: Table + + + Orders and customers + + + #### Metadata + + + Metabase ID: __27__ + + + Created On: __2024-06-19T11:57:35.85999Z__' + type: analysis + url: http://localhost:3000/card/27 + maturity: medium + owner: + name: dbtmetabase + email: dbtmetabase@example.com + depends_on: + - ref('customers') + - ref('orders') diff --git a/tests/fixtures/exposure/type/card/24.yml b/tests/fixtures/exposure/type/card/28.yml similarity index 52% rename from tests/fixtures/exposure/type/card/24.yml rename to tests/fixtures/exposure/type/card/28.yml index 1b6ef96..c4ddef3 100644 --- a/tests/fixtures/exposure/type/card/24.yml +++ b/tests/fixtures/exposure/type/card/28.yml @@ -1,7 +1,7 @@ version: 2 exposures: - - name: orders_customers_filtered - label: Orders Customers Filtered + - name: orders___customers__filtered_by_status_is_completed + label: Orders + Customers, Filtered by Status is completed description: '### Visualization: Table @@ -11,15 +11,16 @@ exposures: #### Metadata - Metabase ID: __24__ + Metabase ID: __28__ - Created On: __2024-01-26T23:35:08.864176__' + Created On: __2024-06-19T11:58:35.060527Z__' type: analysis - url: http://localhost:3000/card/24 + url: http://localhost:3000/card/28 maturity: medium owner: name: dbtmetabase email: dbtmetabase@example.com depends_on: - ref('customers') + - ref('orders') diff --git a/tests/fixtures/exposure/type/card/29.yml b/tests/fixtures/exposure/type/card/29.yml new file mode 100644 index 0000000..cb57633 --- /dev/null +++ b/tests/fixtures/exposure/type/card/29.yml @@ -0,0 +1,17 @@ +version: 2 +exposures: + - name: returned_order_count_sql + label: Returned Order Count SQL + description: "### Visualization: Scalar\n\nNo description provided in Metabase\n\ + \n#### Query\n\n```\nselect\n count(*)\nfrom STG_payments as p\n left\ + \ join STG_orders as o on p.order_id = o.order_id\nwhere o.status = 'returned'\n\ + ;\n```\n\n#### Metadata\n\nMetabase ID: __29__\n\nCreated On: __2024-06-19T12:03:01.905927Z__" + type: analysis + url: http://localhost:3000/card/29 + maturity: medium + owner: + name: dbtmetabase + email: dbtmetabase@example.com + depends_on: + - ref('stg_orders') + - ref('stg_payments') diff --git a/tests/fixtures/exposure/type/card/3.yml b/tests/fixtures/exposure/type/card/3.yml deleted file mode 100644 index e6b1210..0000000 --- a/tests/fixtures/exposure/type/card/3.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: total_customers - label: Total customers - description: '### Visualization: Scalar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __3__ - - - Created On: __2021-07-21T08:01:37.434243Z__' - type: analysis - url: http://localhost:3000/card/3 - maturity: medium - owner: - name: '' - email: '' - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/card/30.yml b/tests/fixtures/exposure/type/card/30.yml new file mode 100644 index 0000000..f43d96a --- /dev/null +++ b/tests/fixtures/exposure/type/card/30.yml @@ -0,0 +1,34 @@ +version: 2 +exposures: + - name: dummy + label: Dummy + description: '### Visualization: Table + + + Dummy 1 + + + #### Query + + + ``` + + select 1; + + ``` + + + #### Metadata + + + Metabase ID: __30__ + + + Created On: __2024-06-20T05:56:33.051625Z__' + type: analysis + url: http://localhost:3000/card/30 + maturity: medium + owner: + name: dbtmetabase + email: dbtmetabase@example.com + depends_on: [] diff --git a/tests/fixtures/exposure/type/card/31.yml b/tests/fixtures/exposure/type/card/31.yml new file mode 100644 index 0000000..df222eb --- /dev/null +++ b/tests/fixtures/exposure/type/card/31.yml @@ -0,0 +1,34 @@ +version: 2 +exposures: + - name: dummy_1 + label: Dummy + description: '### Visualization: Table + + + Dummy 2 + + + #### Query + + + ``` + + select 2; + + ``` + + + #### Metadata + + + Metabase ID: __31__ + + + Created On: __2024-06-20T05:56:45.033599Z__' + type: analysis + url: http://localhost:3000/card/31 + maturity: medium + owner: + name: dbtmetabase + email: dbtmetabase@example.com + depends_on: [] diff --git a/tests/fixtures/exposure/type/card/32.yml b/tests/fixtures/exposure/type/card/32.yml new file mode 100644 index 0000000..18b46bb --- /dev/null +++ b/tests/fixtures/exposure/type/card/32.yml @@ -0,0 +1,16 @@ +version: 2 +exposures: + - name: completed_orders_cte_sql + label: Completed Orders CTE SQL + description: "### Visualization: Table\n\nCTE SQL\n\n#### Query\n\n```\nwith completed_orders\ + \ as (\n select * from Orders where status = 'completed'\n)\nselect * from\ + \ completed_orders\n```\n\n#### Metadata\n\nMetabase ID: __32__\n\nCreated On:\ + \ __2024-06-20T06:01:34.470497Z__" + type: analysis + url: http://localhost:3000/card/32 + maturity: medium + owner: + name: dbtmetabase + email: dbtmetabase@example.com + depends_on: + - ref('orders') diff --git a/tests/fixtures/exposure/type/card/4.yml b/tests/fixtures/exposure/type/card/4.yml deleted file mode 100644 index aabce70..0000000 --- a/tests/fixtures/exposure/type/card/4.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: customers_added_in_the_last_30_days - label: Customers added in the last 30 days - description: '### Visualization: Scalar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __4__ - - - Created On: __2021-07-21T08:01:37.535187Z__' - type: analysis - url: http://localhost:3000/card/4 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/card/5.yml b/tests/fixtures/exposure/type/card/5.yml deleted file mode 100644 index 08c10bf..0000000 --- a/tests/fixtures/exposure/type/card/5.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: customers_added_in_the_last_30_days_1 - label: Customers added in the last 30 days - description: '### Visualization: Scalar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __5__ - - - Created On: __2021-07-21T08:01:37.630969Z__' - type: analysis - url: http://localhost:3000/card/5 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/card/6.yml b/tests/fixtures/exposure/type/card/6.yml deleted file mode 100644 index 23f2b7b..0000000 --- a/tests/fixtures/exposure/type/card/6.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: customers_by_number_of_orders - label: Customers by number_of_orders - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __6__ - - - Created On: __2021-07-21T08:01:37.754606Z__' - type: analysis - url: http://localhost:3000/card/6 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/card/7.yml b/tests/fixtures/exposure/type/card/7.yml deleted file mode 100644 index 1e478c0..0000000 --- a/tests/fixtures/exposure/type/card/7.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: customers_by_customer_lifetime_value - label: Customers by customer_lifetime_value - description: '### Visualization: Bar - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __7__ - - - Created On: __2021-07-21T08:01:37.858387Z__' - type: analysis - url: http://localhost:3000/card/7 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/card/8.yml b/tests/fixtures/exposure/type/card/8.yml deleted file mode 100644 index db0f297..0000000 --- a/tests/fixtures/exposure/type/card/8.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: number_of_orders_over_time - label: Number_of_orders over time - description: '### Visualization: Line - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __8__ - - - Created On: __2021-07-21T08:01:38.016244Z__' - type: analysis - url: http://localhost:3000/card/8 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/card/9.yml b/tests/fixtures/exposure/type/card/9.yml deleted file mode 100644 index 0e39c06..0000000 --- a/tests/fixtures/exposure/type/card/9.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: customer_lifetime_value_over_time_1 - label: Customer_lifetime_value over time - description: '### Visualization: Line - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __9__ - - - Created On: __2021-07-21T08:01:38.189846Z__' - type: analysis - url: http://localhost:3000/card/9 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/dashboard/1.yml b/tests/fixtures/exposure/type/dashboard/1.yml deleted file mode 100644 index 636868e..0000000 --- a/tests/fixtures/exposure/type/dashboard/1.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: 2 -exposures: - - name: a_look_at_your_customers_table - label: A look at your customers table - description: '### Dashboard Cards: 18 - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __1__ - - - Created On: __2021-07-21T08:01:37.328519Z__' - type: dashboard - url: http://localhost:3000/dashboard/1 - maturity: medium - owner: - name: dbtmetabase - email: user@example.com - depends_on: - - ref('customers') diff --git a/tests/fixtures/exposure/type/dashboard/2.yml b/tests/fixtures/exposure/type/dashboard/2.yml new file mode 100644 index 0000000..946fc44 --- /dev/null +++ b/tests/fixtures/exposure/type/dashboard/2.yml @@ -0,0 +1,28 @@ +version: 2 +exposures: + - name: the_dashboard + label: The Dashboard + description: '### Dashboard Cards: 3 + + + Dashboard is a dashboard is a dashboard + + + #### Metadata + + + Metabase ID: __2__ + + + Created On: __2024-06-19T11:57:43.675681Z__' + type: dashboard + url: http://localhost:3000/dashboard/2 + maturity: medium + owner: + name: dbtmetabase + email: dbtmetabase@example.com + depends_on: + - ref('customers') + - ref('orders') + - ref('stg_orders') + - ref('stg_payments') diff --git a/tests/test_exposures.py b/tests/test_exposures.py index dab8c69..322ac44 100644 --- a/tests/test_exposures.py +++ b/tests/test_exposures.py @@ -44,14 +44,8 @@ def test_exposures_collection_grouping(self): output_grouping="collection", ) - self._assert_exposures( - fixtures_path / "a_look_at_your_customers_table.yml", - output_path / "a_look_at_your_customers_table.yml", - ) - self._assert_exposures( - fixtures_path / "our_analytics.yml", - output_path / "our_analytics.yml", - ) + for file in fixtures_path.iterdir(): + self._assert_exposures(file, output_path / file.name) def test_exposures_grouping_type(self): fixtures_path = FIXTURES_PATH / "exposure" / "type" @@ -61,17 +55,11 @@ def test_exposures_grouping_type(self): output_grouping="type", ) - for i in [*range(1, 18), 24]: - self._assert_exposures( - fixtures_path / "card" / f"{i}.yml", - output_path / "card" / f"{i}.yml", - ) - - for i in range(1, 2): - self._assert_exposures( - fixtures_path / "dashboard" / f"{i}.yml", - output_path / "dashboard" / f"{i}.yml", - ) + for file in (fixtures_path / "card").iterdir(): + self._assert_exposures(file, output_path / "card" / file.name) + + for file in (fixtures_path / "dashboard").iterdir(): + self._assert_exposures(file, output_path / "dashboard" / file.name) def test_exposures_aliased_ref(self): for model in self.c.manifest.read_models(): diff --git a/tests/test_metabase.py b/tests/test_metabase.py index 4038919..65541b9 100644 --- a/tests/test_metabase.py +++ b/tests/test_metabase.py @@ -8,33 +8,33 @@ def setUp(self): self.metabase = MockMetabase(url="http://localhost") def test_metabase_find_database(self): - db = self.metabase.find_database(name="unit_testing") + db = self.metabase.find_database(name="dbtmetabase") assert db self.assertEqual(2, db["id"]) self.assertIsNone(self.metabase.find_database(name="foo")) def test_metabase_get_collections(self): excluded = self.metabase.get_collections(exclude_personal=True) - self.assertEqual(3, len(excluded)) + self.assertEqual(1, len(excluded)) included = self.metabase.get_collections(exclude_personal=False) - self.assertEqual(4, len(included)) + self.assertEqual(2, len(included)) def test_metabase_get_collection_items(self): cards = self.metabase.get_collection_items( - uid="3", + uid="root", models=("card",), ) self.assertEqual({"card"}, {item["model"] for item in cards}) dashboards = self.metabase.get_collection_items( - uid="3", + uid="root", models=("dashboard",), ) self.assertEqual({"dashboard"}, {item["model"] for item in dashboards}) both = self.metabase.get_collection_items( - uid="3", + uid="root", models=("card", "dashboard"), ) self.assertEqual({"card", "dashboard"}, {item["model"] for item in both}) diff --git a/tests/test_models.py b/tests/test_models.py index 35c9b29..340d046 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -11,7 +11,7 @@ def setUp(self): def test_export(self): self.c.export_models( - metabase_database="unit_testing", + metabase_database="dbtmetabase", skip_sources=True, sync_timeout=0, order_fields=True, @@ -34,18 +34,23 @@ def test_build_lookups(self): "CUSTOMER_ID", "ORDER_DATE", "STATUS", + "AMOUNT", "CREDIT_CARD_AMOUNT", "COUPON_AMOUNT", "BANK_TRANSFER_AMOUNT", "GIFT_CARD_AMOUNT", - "AMOUNT", ], "PUBLIC.RAW_CUSTOMERS": ["ID", "FIRST_NAME", "LAST_NAME"], "PUBLIC.RAW_ORDERS": ["ID", "USER_ID", "ORDER_DATE", "STATUS"], "PUBLIC.RAW_PAYMENTS": ["ID", "ORDER_ID", "PAYMENT_METHOD", "AMOUNT"], - "PUBLIC.STG_CUSTOMERS": ["CUSTOMER_ID"], - "PUBLIC.STG_ORDERS": ["ORDER_ID", "STATUS"], - "PUBLIC.STG_PAYMENTS": ["PAYMENT_ID", "PAYMENT_METHOD"], + "PUBLIC.STG_CUSTOMERS": ["CUSTOMER_ID", "FIRST_NAME", "LAST_NAME"], + "PUBLIC.STG_ORDERS": ["ORDER_ID", "STATUS", "ORDER_DATE", "CUSTOMER_ID"], + "PUBLIC.STG_PAYMENTS": [ + "PAYMENT_ID", + "PAYMENT_METHOD", + "ORDER_ID", + "AMOUNT", + ], } actual_tables = self.c._ModelsMixin__get_tables(database_id="2") # type: ignore