Skip to main content

Test BigQuery query using BigQuery

Project description

BigQueryのクエリをテストするためのツール

Run pytest

BigQueryへのクエリロジックのテストができます

Basic Usage

Simple

from bqqtest import QueryTest
from google.cloud import bigquery

# expected
expected_schema = [
    {"name": "name", "type": "STRING", "mode": "NULLABLE"},
    {"name": "value", "type": "INT64", "mode": "NULLABLE"},
]
expected_datum = [["abc", 100], ["bbb", 333]]
expected = {"schema": expected_schema, "datum": expected_datum}

# actual
target_schema = [
    {"name": "name", "type": "STRING", "mode": "NULLABLE"},
    {"name": "value", "type": "INT64", "mode": "NULLABLE"},
]
target_datum = [["abc", 100], ["bbb", 333]]
tables = {"test.target_table": {"schema": target_schema, "datum": target_datum}}
eval_query = {"query": "SELECT * FROM test.target_table", "params": []}

qt = QueryTest(bigquery.Client(), expected, tables, eval_query)
success, diff = qt.run()
success  # True

Group By

from bqqtest import QueryTest
from google.cloud import bigquery

# expected
expected_schema = [
    {"name": "item", "type": "STRING", "mode": "NULLABLE"},
    {"name": "total", "type": "INT64", "mode": "NULLABLE"},
]
expected_datum = [["abc", 300], ["bbb", 333]]
expected = {"schema": expected_schema, "datum": expected_datum}

# actual
target_schema = [
    {"name": "item", "type": "STRING", "mode": "NULLABLE"},
    {"name": "value", "type": "INT64", "mode": "NULLABLE"},
]
target_datum = [["abc", 100], ["bbb", 333], ["abc", 200]]
tables = {"test.target_table": {"schema": target_schema, "datum": target_datum}}
eval_query = {
    "query": "SELECT item, SUM(value) AS total FROM test.target_table GROUP BY item",
    "params": [],
}

qt = QueryTest(bigquery.Client(), expected, tables, eval_query)
success, diff = qt.run()
success  # True

Multi Table

from bqqtest import QueryTest
from google.cloud import bigquery


# expected
expected_schema = [
    {"name": "item", "type": "STRING", "mode": "NULLABLE"},
    {"name": "value", "type": "INT64", "mode": "NULLABLE"},
]
expected_datum = [["abc", 100], ["bbb", 333], ["xxxx", 888], ["zzzz", 999]]
expected = {"schema": expected_schema, "datum": expected_datum}

# actual
target_schema = [
    {"name": "item", "type": "STRING", "mode": "NULLABLE"},
    {"name": "value", "type": "INT64", "mode": "NULLABLE"},
]
target_datum1 = [["abc", 100], ["bbb", 333]]
target_datum2 = [["xxxx", 888], ["zzzz", 999]]
tables = {
    "test.table1": {"schema": target_schema, "datum": target_datum1},
    "test.table2": {"schema": target_schema, "datum": target_datum2},
}
eval_query = {
    "query": "SELECT * FROM `test.table1` UNION ALL SELECT * FROM `test.table2`",
    "params": [],
}

qt = QueryTest(bigquery.Client(), expected, tables, eval_query)
success, diff = qt.run()
success  # True

特徴

see also https://qiita.com/tamanobi/items/9434ca0dbd5f0d3018d9

  • WITH を利用して、 BigQuery に保存されないテストデータを一時的に生成します。
    • BigQuery は保存されているデータ走査した量とAPIリクエスト数で課金されるため、費用抑えてユニットテストができます。
    • 料金の詳細は、 BigQuery の公式ドキュメントを参照してください
  • テストをするために、クエリを書き直す必要はありません
    • ライブラリ内部では、対象テーブルの Identifier を書き換えてテーブルを差し替えます

注意

BigQuery へ直接クエリを発行します。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bqqtest-0.5.1.tar.gz (9.5 kB view details)

Uploaded Source

Built Distribution

bqqtest-0.5.1-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file bqqtest-0.5.1.tar.gz.

File metadata

  • Download URL: bqqtest-0.5.1.tar.gz
  • Upload date:
  • Size: 9.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.3 CPython/3.7.6 Darwin/18.7.0

File hashes

Hashes for bqqtest-0.5.1.tar.gz
Algorithm Hash digest
SHA256 cc9dd4df61c7e49dafcf2aff851ce32501d99a775ab4ecfd317ec8e9a86eba4b
MD5 7c6bb764aaa9b14a00b1468f2adb3825
BLAKE2b-256 7a5f9c537bbf8b03cdf24b51e92da88f4af2604b56b725593834feb1f0029819

See more details on using hashes here.

File details

Details for the file bqqtest-0.5.1-py3-none-any.whl.

File metadata

  • Download URL: bqqtest-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.3 CPython/3.7.6 Darwin/18.7.0

File hashes

Hashes for bqqtest-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e95f305d003301513e75887962f4883ca5b9ee87f377334a2ee3129dc9f977f3
MD5 16b91a5d8b1897ff25f080658fc648fd
BLAKE2b-256 e463cf1b946fc04ffceeca6d2ca1545702430097631ddf513197937caf179741

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page