datacontract-cli 0.12.1__tar.gz → 0.12.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {datacontract_cli-0.12.1/datacontract_cli.egg-info → datacontract_cli-0.12.3}/PKG-INFO +182 -30
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/README.md +163 -13
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/cli.py +42 -3
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_changelog.py +2 -2
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_ci.py +2 -1
- datacontract_cli-0.12.3/datacontract/command_dbt.py +161 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_test.py +2 -1
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/data_contract_checks.py +46 -15
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/check_soda_execute.py +18 -3
- datacontract_cli-0.12.3/datacontract/engines/soda/connections/redshift.py +29 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/dbt_exporter.py +15 -146
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/sql_type_converter.py +98 -34
- datacontract_cli-0.12.3/datacontract/imports/dbt_importer.py +366 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/protobuf_importer.py +56 -6
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/spark_importer.py +2 -2
- datacontract_cli-0.12.3/datacontract/integration/dbt_sync.py +1215 -0
- datacontract_cli-0.12.3/datacontract/integration/dbt_test_mapping.py +165 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/integration/entropy_data.py +5 -2
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/output/test_results_writer.py +4 -4
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3/datacontract_cli.egg-info}/PKG-INFO +182 -30
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract_cli.egg-info/SOURCES.txt +8 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract_cli.egg-info/requires.txt +20 -17
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/pyproject.toml +36 -22
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_data_contract_checks.py +85 -1
- datacontract_cli-0.12.3/tests/test_dbt_sync.py +1333 -0
- datacontract_cli-0.12.3/tests/test_dbt_test_mapping.py +169 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_dbt.py +1 -1
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_spark.py +54 -0
- datacontract_cli-0.12.3/tests/test_redshift_soda_configuration.py +75 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_sql_type_converter_physicaltype.py +25 -2
- datacontract_cli-0.12.3/tests/test_test_soda_connection_error.py +32 -0
- datacontract_cli-0.12.1/datacontract/imports/dbt_importer.py +0 -289
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/LICENSE +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/MANIFEST.in +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/__init__.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/api.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/catalog/catalog.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/changelog/__init__.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/changelog/changelog.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/changelog/normalize.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_api.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_catalog.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_export.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_import.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_init.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_lint.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_publish.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/data_contract.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/__init__.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/data_contract_test.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/__init__.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/athena.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/bigquery.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/databricks.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/duckdb_connection.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/impala.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/kafka.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/mysql.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/oracle.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/postgres.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/snowflake.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/sqlserver.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/trino.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/__init__.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/avro_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/avro_idl_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/bigquery_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/custom_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/data_caterer_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/dbml_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/dcs_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/dqx_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/duckdb_type_converter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/excel_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/exporter_factory.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/go_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/great_expectations_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/html_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/iceberg_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/jsonschema_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/markdown_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/mermaid_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/odcs_export_helper.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/odcs_v3_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/pandas_type_converter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/protobuf_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/pydantic_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/rdf_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/sodacl_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/spark_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/sql_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/sqlalchemy_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/avro_importer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/bigquery_importer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/csv_importer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/dbml_importer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/dcs_importer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/excel_importer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/glue_importer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/iceberg_importer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/importer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/importer_factory.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/json_importer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/jsonschema_importer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/odcs_helper.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/odcs_importer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/parquet_importer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/sql_importer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/unity_importer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/init/init_template.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/lint/files.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/lint/resolve.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/lint/resources.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/lint/schema.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/lint/urls.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/model/changelog.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/model/exceptions.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/model/odcs.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/model/run.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/output/__init__.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/output/ci_output.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/output/json_test_results.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/output/junit_test_results.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/output/output_format.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/output/text_changelog_results.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/py.typed +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/datacontract-1.2.1.init.yaml +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/datacontract-1.2.1.schema.json +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/odcs-3.0.2.schema.json +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/odcs-3.1.0.init.yaml +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/odcs-3.1.0.schema.json +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/datacontract.html +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/datacontract_odcs.html +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/index.html +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/datacontract_information.html +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/datacontract_terms.html +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/definition.html +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/example.html +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/model_field.html +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/quality.html +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/server.html +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/style/output.css +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract_cli.egg-info/dependency_links.txt +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract_cli.egg-info/entry_points.txt +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract_cli.egg-info/top_level.txt +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/setup.cfg +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_api.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_bigquery_soda_connection.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_catalog.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_changelog.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_changelog_engine.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_changelog_normalize.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_changelog_output_text.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_ci_output.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_cli.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_data_contract.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_data_contract_specification.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_description_linter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_download_datacontract_file.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_duckdb_json.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_avro.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_avro_idl.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_bigquery.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_complex_data_contract.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_custom.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_custom_exporter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_custom_model.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_data_caterer.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_dbml.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_dbt_models.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_dbt_sources.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_dbt_staging_sql.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_dqx.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_excel.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_go.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_great_expectations.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_html.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_iceberg.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_jsonschema.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_markdown.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_mermaid.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_odcs_v3.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_protobuf.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_pydantic.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_rdf.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_sodacl.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_spark.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_sql.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_sql_query.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_sqlalchemy.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_avro.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_bigquery.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_csv.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_dbml.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_excel.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_glue.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_iceberg.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_json.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_jsonschema.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_odcs_v3.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_parquet.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_protobuf.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_sql_oracle.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_sql_postgres.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_sql_snowflake.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_sql_sqlserver.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_unity_file.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_integration_entropydata.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_lint.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_require_env.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_resolve.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_roundtrip_jsonschema.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_sqlserver_soda_connection.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_api.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_athena_iceberg.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_azure_remote.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_bigquery.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_checks_filter.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_databricks.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_dataframe.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_delta.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_gcs_csv_remote.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_gcs_json_remote.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_kafka.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_kafka_remote.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_local_json.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_local_json_nd.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_mysql.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_oracle.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_output_json.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_output_junit.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_parquet.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_postgres.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_quality.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_s3_csv.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_s3_delta.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_s3_json.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_s3_json_complex.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_s3_json_multiple_models.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_s3_json_remote.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_schema_evolution.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_server_not_found.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_snowflake.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_sqlserver.py +0 -0
- {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_trino.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datacontract-cli
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.3
|
|
4
4
|
Summary: The datacontract CLI is an open source command-line tool for working with Data Contracts. It uses data contract YAML files to lint the data contract, connect to data sources and execute schema and quality tests, detect breaking changes, and export to different formats. The tool is written in Python. It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a Python library.
|
|
5
5
|
Author-email: Jochen Christ <jochen.christ@innoq.com>, Stefan Negele <stefan.negele@innoq.com>, Simon Harrer <simon.harrer@innoq.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -11,17 +11,16 @@ Classifier: Operating System :: OS Independent
|
|
|
11
11
|
Requires-Python: <3.13,>=3.10
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist: typer<0.
|
|
14
|
+
Requires-Dist: typer<0.26,>=0.18.0
|
|
15
15
|
Requires-Dist: pydantic<2.14.0,>=2.8.2
|
|
16
16
|
Requires-Dist: pyyaml~=6.0.1
|
|
17
|
-
Requires-Dist: requests<2.
|
|
17
|
+
Requires-Dist: requests<2.35,>=2.31
|
|
18
18
|
Requires-Dist: fastjsonschema<2.22.0,>=2.19.1
|
|
19
19
|
Requires-Dist: jsonschema<5.0.0,>=4.23.0
|
|
20
20
|
Requires-Dist: pytz>=2024.1
|
|
21
21
|
Requires-Dist: python-multipart<1.0.0,>=0.0.20
|
|
22
22
|
Requires-Dist: rich<16.0,>=13.7
|
|
23
23
|
Requires-Dist: sqlglot<31.0.0,>=26.6.0
|
|
24
|
-
Requires-Dist: setuptools>=60
|
|
25
24
|
Requires-Dist: python-dotenv<2.0.0,>=1.0.0
|
|
26
25
|
Requires-Dist: boto3<2.0.0,>=1.34.41
|
|
27
26
|
Requires-Dist: Jinja2<4.0.0,>=3.1.5
|
|
@@ -29,6 +28,7 @@ Requires-Dist: jinja_partials<1.0.0,>=0.2.1
|
|
|
29
28
|
Requires-Dist: datacontract-specification<2.0.0,>=1.2.3
|
|
30
29
|
Requires-Dist: open-data-contract-standard<4.0.0,>=3.1.2
|
|
31
30
|
Requires-Dist: deepdiff<10.0.0,>=6.0.0
|
|
31
|
+
Requires-Dist: setuptools>=70
|
|
32
32
|
Provides-Extra: avro
|
|
33
33
|
Requires-Dist: avro==1.12.1; extra == "avro"
|
|
34
34
|
Provides-Extra: bigquery
|
|
@@ -41,7 +41,7 @@ Provides-Extra: databricks
|
|
|
41
41
|
Requires-Dist: soda-core-spark-df<3.6.0,>=3.3.20; extra == "databricks"
|
|
42
42
|
Requires-Dist: soda-core-spark[databricks]<3.6.0,>=3.3.20; extra == "databricks"
|
|
43
43
|
Requires-Dist: databricks-sql-connector<4.3.0,>=3.7.0; extra == "databricks"
|
|
44
|
-
Requires-Dist: databricks-sdk<0.
|
|
44
|
+
Requires-Dist: databricks-sdk<0.109.0; extra == "databricks"
|
|
45
45
|
Requires-Dist: pyspark<5.0.0,>=3.5.0; extra == "databricks"
|
|
46
46
|
Provides-Extra: iceberg
|
|
47
47
|
Requires-Dist: pyiceberg==0.11.1; extra == "iceberg"
|
|
@@ -51,14 +51,16 @@ Requires-Dist: soda-core-spark-df<3.6.0,>=3.3.20; extra == "kafka"
|
|
|
51
51
|
Requires-Dist: pyspark<5.0.0,>=3.5.0; extra == "kafka"
|
|
52
52
|
Provides-Extra: mysql
|
|
53
53
|
Requires-Dist: soda-core-mysql<3.6.0,>=3.3.20; extra == "mysql"
|
|
54
|
-
Requires-Dist: mysql-connector-python<
|
|
54
|
+
Requires-Dist: mysql-connector-python<9.7.0,>=8.0.30; extra == "mysql"
|
|
55
55
|
Provides-Extra: postgres
|
|
56
56
|
Requires-Dist: soda-core-postgres<3.6.0,>=3.3.20; extra == "postgres"
|
|
57
|
+
Provides-Extra: redshift
|
|
58
|
+
Requires-Dist: soda-core-redshift<3.6.0,>=3.3.20; extra == "redshift"
|
|
57
59
|
Provides-Extra: s3
|
|
58
60
|
Requires-Dist: s3fs<2027.0.0,>=2025.2.0; extra == "s3"
|
|
59
|
-
Requires-Dist: aiobotocore<3.
|
|
61
|
+
Requires-Dist: aiobotocore<3.8.0,>=2.17.0; extra == "s3"
|
|
60
62
|
Provides-Extra: snowflake
|
|
61
|
-
Requires-Dist: snowflake-connector-python[pandas]<4.
|
|
63
|
+
Requires-Dist: snowflake-connector-python[pandas]<4.6,>=3.6; extra == "snowflake"
|
|
62
64
|
Requires-Dist: soda-core-snowflake<3.6.0,>=3.3.20; extra == "snowflake"
|
|
63
65
|
Provides-Extra: sqlserver
|
|
64
66
|
Requires-Dist: soda-core-sqlserver<3.6.0,>=3.3.20; extra == "sqlserver"
|
|
@@ -68,8 +70,8 @@ Provides-Extra: athena
|
|
|
68
70
|
Requires-Dist: soda-core-athena<3.6.0,>=3.3.20; extra == "athena"
|
|
69
71
|
Provides-Extra: trino
|
|
70
72
|
Requires-Dist: soda-core-trino<3.6.0,>=3.3.20; extra == "trino"
|
|
71
|
-
Provides-Extra:
|
|
72
|
-
Requires-Dist:
|
|
73
|
+
Provides-Extra: impala
|
|
74
|
+
Requires-Dist: soda-core-impala<3.6.0,>=3.3.20; extra == "impala"
|
|
73
75
|
Provides-Extra: dbml
|
|
74
76
|
Requires-Dist: pydbml>=1.1.1; extra == "dbml"
|
|
75
77
|
Provides-Extra: duckdb
|
|
@@ -80,24 +82,24 @@ Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
|
|
|
80
82
|
Provides-Extra: rdf
|
|
81
83
|
Requires-Dist: rdflib==7.6.0; extra == "rdf"
|
|
82
84
|
Provides-Extra: api
|
|
83
|
-
Requires-Dist: fastapi==0.136.
|
|
84
|
-
Requires-Dist: uvicorn
|
|
85
|
+
Requires-Dist: fastapi==0.136.1; extra == "api"
|
|
86
|
+
Requires-Dist: uvicorn<0.47.0,>=0.44.0; extra == "api"
|
|
85
87
|
Provides-Extra: protobuf
|
|
86
|
-
Requires-Dist:
|
|
88
|
+
Requires-Dist: protobuf<8.0,>=3.20; extra == "protobuf"
|
|
87
89
|
Provides-Extra: all
|
|
88
|
-
Requires-Dist: datacontract-cli[api,athena,bigquery,csv,databricks,dbml,
|
|
90
|
+
Requires-Dist: datacontract-cli[api,athena,bigquery,csv,databricks,dbml,duckdb,excel,iceberg,impala,kafka,mysql,oracle,parquet,postgres,protobuf,rdf,redshift,s3,snowflake,sqlserver,trino]; extra == "all"
|
|
89
91
|
Provides-Extra: dev
|
|
90
92
|
Requires-Dist: datacontract-cli[all]; extra == "dev"
|
|
91
93
|
Requires-Dist: httpx==0.28.1; extra == "dev"
|
|
92
94
|
Requires-Dist: kafka-python; extra == "dev"
|
|
93
95
|
Requires-Dist: minio==7.2.20; extra == "dev"
|
|
94
|
-
Requires-Dist: moto==5.1
|
|
96
|
+
Requires-Dist: moto==5.2.1; extra == "dev"
|
|
95
97
|
Requires-Dist: pandas>=2.1.0; extra == "dev"
|
|
96
|
-
Requires-Dist: pre-commit<4.
|
|
98
|
+
Requires-Dist: pre-commit<4.7.0,>=3.7.1; extra == "dev"
|
|
97
99
|
Requires-Dist: pytest; extra == "dev"
|
|
98
100
|
Requires-Dist: pytest-xdist; extra == "dev"
|
|
99
101
|
Requires-Dist: pymssql==2.3.13; extra == "dev"
|
|
100
|
-
Requires-Dist: ruff==0.15.
|
|
102
|
+
Requires-Dist: ruff==0.15.12; extra == "dev"
|
|
101
103
|
Requires-Dist: testcontainers[kafka,minio,mssql,mysql,postgres]==4.14.2; extra == "dev"
|
|
102
104
|
Requires-Dist: trino==0.337.0; extra == "dev"
|
|
103
105
|
Dynamic: license-file
|
|
@@ -230,6 +232,9 @@ $ datacontract changelog v1.odcs.yaml v2.odcs.yaml
|
|
|
230
232
|
# execute schema and quality checks (define credentials as environment variables)
|
|
231
233
|
$ datacontract test odcs.yaml
|
|
232
234
|
|
|
235
|
+
# generate dbt tests from a contract into your dbt project and run `dbt test`
|
|
236
|
+
$ datacontract dbt sync orders.odcs.yaml --project-dir ./warehouse
|
|
237
|
+
|
|
233
238
|
# export data contract as html (other formats: avro, dbt-models, dbt-sources, dbt-staging-sql, jsonschema, odcs, rdf, sql, sodacl, terraform, ...)
|
|
234
239
|
$ datacontract export html datacontract.yaml --output odcs.html
|
|
235
240
|
|
|
@@ -345,23 +350,26 @@ A list of available extras:
|
|
|
345
350
|
| Amazon Athena | `pip install datacontract-cli[athena]` |
|
|
346
351
|
| Avro Support | `pip install datacontract-cli[avro]` |
|
|
347
352
|
| Google BigQuery | `pip install datacontract-cli[bigquery]` |
|
|
353
|
+
| CSV | `pip install datacontract-cli[csv]` |
|
|
348
354
|
| Databricks Integration | `pip install datacontract-cli[databricks]` |
|
|
355
|
+
| DBML | `pip install datacontract-cli[dbml]` |
|
|
349
356
|
| DuckDB (local/S3/GCS/Azure file testing) | `pip install datacontract-cli[duckdb]` |
|
|
357
|
+
| Excel | `pip install datacontract-cli[excel]` |
|
|
350
358
|
| Iceberg | `pip install datacontract-cli[iceberg]` |
|
|
359
|
+
| Impala | `pip install datacontract-cli[impala]` |
|
|
351
360
|
| Kafka Integration | `pip install datacontract-cli[kafka]` |
|
|
352
361
|
| MySQL Integration | `pip install datacontract-cli[mysql]` |
|
|
362
|
+
| Oracle | `pip install datacontract-cli[oracle]` |
|
|
363
|
+
| Parquet | `pip install datacontract-cli[parquet]` |
|
|
353
364
|
| PostgreSQL Integration | `pip install datacontract-cli[postgres]` |
|
|
365
|
+
| protobuf | `pip install datacontract-cli[protobuf]` |
|
|
366
|
+
| RDF | `pip install datacontract-cli[rdf]` |
|
|
367
|
+
| Amazon Redshift | `pip install datacontract-cli[redshift]` |
|
|
354
368
|
| S3 Integration | `pip install datacontract-cli[s3]` |
|
|
355
369
|
| Snowflake Integration | `pip install datacontract-cli[snowflake]` |
|
|
356
370
|
| Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
|
|
357
371
|
| Trino | `pip install datacontract-cli[trino]` |
|
|
358
|
-
| Impala | `pip install datacontract-cli[impala]` |
|
|
359
|
-
| dbt | `pip install datacontract-cli[dbt]` |
|
|
360
|
-
| DBML | `pip install datacontract-cli[dbml]` |
|
|
361
|
-
| Parquet | `pip install datacontract-cli[parquet]` |
|
|
362
|
-
| RDF | `pip install datacontract-cli[rdf]` |
|
|
363
372
|
| API (run as web server) | `pip install datacontract-cli[api]` |
|
|
364
|
-
| protobuf | `pip install datacontract-cli[protobuf]` |
|
|
365
373
|
|
|
366
374
|
|
|
367
375
|
## Documentation
|
|
@@ -372,6 +380,7 @@ Commands
|
|
|
372
380
|
- [lint](#lint)
|
|
373
381
|
- [changelog](#changelog)
|
|
374
382
|
- [test](#test)
|
|
383
|
+
- [dbt](#dbt-sync)
|
|
375
384
|
- [ci](#ci)
|
|
376
385
|
- [export](#export)
|
|
377
386
|
- [import](#import)
|
|
@@ -442,13 +451,19 @@ Commands
|
|
|
442
451
|
Show a changelog between two data contracts.
|
|
443
452
|
|
|
444
453
|
╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────╮
|
|
445
|
-
│ * v1 TEXT The location (path) of the source (before) data contract YAML.
|
|
446
|
-
│
|
|
454
|
+
│ * v1 TEXT The location (url or path) of the source (before) data contract YAML. │
|
|
455
|
+
│ [required] │
|
|
456
|
+
│ * v2 TEXT The location (url or path) of the target (after) data contract YAML. │
|
|
457
|
+
│ [required] │
|
|
447
458
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
448
459
|
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
|
|
449
460
|
│ --debug --no-debug Enable debug logging │
|
|
450
461
|
│ --help Show this message and exit. │
|
|
451
462
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
463
|
+
|
|
464
|
+
Example: datacontract changelog datacontract-v1.yaml datacontract-v2.yaml
|
|
465
|
+
|
|
466
|
+
|
|
452
467
|
```
|
|
453
468
|
|
|
454
469
|
```bash
|
|
@@ -1042,6 +1057,52 @@ models:
|
|
|
1042
1057
|
|
|
1043
1058
|
</details>
|
|
1044
1059
|
|
|
1060
|
+
<details markdown="1">
|
|
1061
|
+
<summary><strong>Amazon Redshift</strong></summary>
|
|
1062
|
+
|
|
1063
|
+
Data Contract CLI can test data in Amazon Redshift (both provisioned clusters and Redshift Serverless).
|
|
1064
|
+
|
|
1065
|
+
##### Example
|
|
1066
|
+
|
|
1067
|
+
datacontract.yaml
|
|
1068
|
+
```yaml
|
|
1069
|
+
servers:
|
|
1070
|
+
redshift:
|
|
1071
|
+
type: redshift
|
|
1072
|
+
host: my-workgroup.123456789012.us-east-1.redshift-serverless.amazonaws.com
|
|
1073
|
+
port: 5439
|
|
1074
|
+
database: dev
|
|
1075
|
+
schema: analytics
|
|
1076
|
+
models:
|
|
1077
|
+
my_table_1: # corresponds to a table
|
|
1078
|
+
type: table
|
|
1079
|
+
fields:
|
|
1080
|
+
my_column_1: # corresponds to a column
|
|
1081
|
+
type: varchar
|
|
1082
|
+
```
|
|
1083
|
+
|
|
1084
|
+
##### Environment Variables
|
|
1085
|
+
All [parameters supported by Soda](https://docs.soda.io/soda/connect-redshift.html), uppercased and prepended by `DATACONTRACT_REDSHIFT_` prefix.
|
|
1086
|
+
For example:
|
|
1087
|
+
|
|
1088
|
+
| Soda parameter | Environment Variable | Details |
|
|
1089
|
+
|---------------------|-------------------------------------------|---------------------|
|
|
1090
|
+
| `username` | `DATACONTRACT_REDSHIFT_USERNAME` | |
|
|
1091
|
+
| `password` | `DATACONTRACT_REDSHIFT_PASSWORD` | leave unset for IAM |
|
|
1092
|
+
| `region` | `DATACONTRACT_REDSHIFT_REGION` | for IAM |
|
|
1093
|
+
| `access_key_id` | `DATACONTRACT_REDSHIFT_ACCESS_KEY_ID` | for IAM |
|
|
1094
|
+
| `secret_access_key` | `DATACONTRACT_REDSHIFT_SECRET_ACCESS_KEY` | for IAM |
|
|
1095
|
+
| `role_arn` | `DATACONTRACT_REDSHIFT_ROLE_ARN` | for IAM |
|
|
1096
|
+
|
|
1097
|
+
IAM credentials can be supplied in two ways:
|
|
1098
|
+
|
|
1099
|
+
1. **AWS_PROFILE** — set `AWS_PROFILE` in your shell to a profile defined in `~/.aws/credentials` and `DATACONTRACT_REDSHIFT_REGION`.
|
|
1100
|
+
2. **Explicit keys** — set `DATACONTRACT_REDSHIFT_REGION`, `..._ACCESS_KEY_ID`, `..._SECRET_ACCESS_KEY`, and `..._SESSION_TOKEN` for temporary credentials, or `..._ROLE_ARN` to assume a role.
|
|
1101
|
+
|
|
1102
|
+
>IAM authentication is supported only for **provisioned** Redshift clusters.
|
|
1103
|
+
|
|
1104
|
+
</details>
|
|
1105
|
+
|
|
1045
1106
|
<details markdown="1">
|
|
1046
1107
|
<summary><strong>MySQL</strong></summary>
|
|
1047
1108
|
|
|
@@ -1221,6 +1282,84 @@ models:
|
|
|
1221
1282
|
|
|
1222
1283
|
</details>
|
|
1223
1284
|
|
|
1285
|
+
### dbt sync
|
|
1286
|
+
> The `dbt sync` command is still work in progress and will receive further functionality and documentation soon.
|
|
1287
|
+
```
|
|
1288
|
+
|
|
1289
|
+
Usage: datacontract dbt sync [OPTIONS] [CONTRACT]
|
|
1290
|
+
|
|
1291
|
+
Generate dbt tests from an ODCS contract and run them.
|
|
1292
|
+
|
|
1293
|
+
Within the specified dbt project, this command wipes `<model-paths>/datacontract_cli/` and
|
|
1294
|
+
`<test-paths>/datacontract_cli/`, regenerates them from the contract, then runs `dbt test`.
|
|
1295
|
+
|
|
1296
|
+
╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────╮
|
|
1297
|
+
│ contract [CONTRACT] Path to the ODCS data contract. If omitted, searches for a single │
|
|
1298
|
+
│ `*.odcs.yaml` in the current directory and its subdirectories. │
|
|
1299
|
+
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
1300
|
+
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
|
|
1301
|
+
│ --project-dir PATH Path to the dbt project root │
|
|
1302
|
+
│ (must contain │
|
|
1303
|
+
│ `dbt_project.yml`). Defaults │
|
|
1304
|
+
│ to the current directory. │
|
|
1305
|
+
│ --schema-name TEXT Which ODCS schema object to │
|
|
1306
|
+
│ sync, by name. │
|
|
1307
|
+
│ [default: all] │
|
|
1308
|
+
│ --model-resolution [name|physicalName] How to map an ODCS schema to │
|
|
1309
|
+
│ a dbt model name. │
|
|
1310
|
+
│ [default: name] │
|
|
1311
|
+
│ --target TEXT Forwarded to `dbt test │
|
|
1312
|
+
│ --target`. │
|
|
1313
|
+
│ --profiles-dir PATH Forwarded to `dbt test │
|
|
1314
|
+
│ --profiles-dir`. │
|
|
1315
|
+
│ --skip-tests --run-tests Generate tests but skip │
|
|
1316
|
+
│ running `dbt test`. │
|
|
1317
|
+
│ [default: run-tests] │
|
|
1318
|
+
│ --publish TEXT The url to publish the │
|
|
1319
|
+
│ results after the test. │
|
|
1320
|
+
│ --server TEXT ODCS server name for │
|
|
1321
|
+
│ published test results. │
|
|
1322
|
+
│ Auto-selected if the │
|
|
1323
|
+
│ contract contains only one │
|
|
1324
|
+
│ server. Otherwise defaults │
|
|
1325
|
+
│ to --target. │
|
|
1326
|
+
│ --ssl-verification --no-ssl-verification SSL verification when │
|
|
1327
|
+
│ publishing test results. │
|
|
1328
|
+
│ [default: ssl-verification] │
|
|
1329
|
+
│ --debug --no-debug Enable debug logging │
|
|
1330
|
+
│ --help Show this message and exit. │
|
|
1331
|
+
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
1332
|
+
|
|
1333
|
+
Example: datacontract dbt sync orders.odcs.yaml --project-dir ./warehouse
|
|
1334
|
+
|
|
1335
|
+
|
|
1336
|
+
```
|
|
1337
|
+
|
|
1338
|
+
`datacontract dbt sync` generates dbt tests from an ODCS data contract directly into your dbt project and (by default) runs `dbt test` against them. The contract becomes the single source of truth for column-level constraints and quality checks. It is recommended to remove existing dbt tests to avoid duplication.
|
|
1339
|
+
|
|
1340
|
+
On each run, the command:
|
|
1341
|
+
|
|
1342
|
+
- **Wipes and regenerates** the `models/datacontract_cli/` and `tests/datacontract_cli/` directories under your dbt project. The paths honor `model-paths` and `test-paths` in `dbt_project.yml`.
|
|
1343
|
+
- **Emits one YAML model file per ODCS schema** that uses dbt's built-in tests and [`dbt_utils`](https://github.com/dbt-labs/dbt-utils).
|
|
1344
|
+
- **Emits singular SQL tests** for all ODCS `quality` that can't be expressed as native YAML tests.
|
|
1345
|
+
- **Runs `dbt test --select tag:datacontract_cli`** to run the generated tests; pre-existing dbt tests are untouched. Pass `--skip-tests` to regenerate without invoking dbt.
|
|
1346
|
+
|
|
1347
|
+
Prerequisites: `dbt-core` plus an adapter (e.g. `dbt-duckdb`, `dbt-postgres`) on `PATH`, [`dbt_utils`](https://github.com/dbt-labs/dbt-utils) installed in your dbt project's `packages.yml`.
|
|
1348
|
+
|
|
1349
|
+
```bash
|
|
1350
|
+
# Auto-discover a contract named *.odcs.yaml in a dbt project
|
|
1351
|
+
$ datacontract dbt sync
|
|
1352
|
+
|
|
1353
|
+
# Explicit contract, run against a specific dbt target
|
|
1354
|
+
$ datacontract dbt sync orders.odcs.yaml --project-dir ./warehouse --target dev
|
|
1355
|
+
|
|
1356
|
+
# Only generate dbt tests, don't run them
|
|
1357
|
+
$ datacontract dbt sync orders.odcs.yaml --skip-tests
|
|
1358
|
+
|
|
1359
|
+
# Run and publish results to an Entropy Data instance
|
|
1360
|
+
$ datacontract dbt sync orders.odcs.yaml --publish https://api.entropy-data.com/api/test-results
|
|
1361
|
+
```
|
|
1362
|
+
|
|
1224
1363
|
### ci
|
|
1225
1364
|
```
|
|
1226
1365
|
|
|
@@ -1271,6 +1410,9 @@ models:
|
|
|
1271
1410
|
│ --help Show this message and │
|
|
1272
1411
|
│ exit. │
|
|
1273
1412
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
1413
|
+
|
|
1414
|
+
Example: datacontract ci datacontract.yaml --output test-results.xml --output-format junit
|
|
1415
|
+
|
|
1274
1416
|
|
|
1275
1417
|
```
|
|
1276
1418
|
|
|
@@ -1395,7 +1537,7 @@ steps:
|
|
|
1395
1537
|
|
|
1396
1538
|
Example: datacontract export html datacontract.yaml --output datacontract.html
|
|
1397
1539
|
For SQL dialects (postgres, mysql, snowflake, databricks, sqlserver, trino, oracle), use
|
|
1398
|
-
`datacontract export sql --dialect <dialect>`.
|
|
1540
|
+
`datacontract export sql --dialect <dialect>`.
|
|
1399
1541
|
|
|
1400
1542
|
|
|
1401
1543
|
```
|
|
@@ -1742,9 +1884,9 @@ For more information about the Excel template structure, visit the [ODCS Excel T
|
|
|
1742
1884
|
│ --help Show this message and exit. │
|
|
1743
1885
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
1744
1886
|
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────╮
|
|
1887
|
+
│ dbt Import a data contract from a dbt manifest file. │
|
|
1745
1888
|
│ sql Import a data contract from a SQL DDL file. │
|
|
1746
1889
|
│ avro Import a data contract from an Avro schema file. │
|
|
1747
|
-
│ dbt Import a data contract from a dbt manifest file. │
|
|
1748
1890
|
│ dbml Import a data contract from a DBML file. │
|
|
1749
1891
|
│ glue Import a data contract from AWS Glue. │
|
|
1750
1892
|
│ bigquery Import a data contract from BigQuery. │
|
|
@@ -1972,7 +2114,17 @@ datacontract import csv --source "test.csv"
|
|
|
1972
2114
|
<details markdown="1">
|
|
1973
2115
|
<summary><strong>protobuf</strong></summary>
|
|
1974
2116
|
|
|
1975
|
-
Importing from protobuf File. Specify file in `source` parameter.
|
|
2117
|
+
Importing from protobuf File. Specify file in `source` parameter.
|
|
2118
|
+
|
|
2119
|
+
Requires the `protoc` compiler installed on the system. Install with:
|
|
2120
|
+
|
|
2121
|
+
| Platform | Command |
|
|
2122
|
+
|----------------|--------------------------------------|
|
|
2123
|
+
| macOS | `brew install protobuf` |
|
|
2124
|
+
| Debian/Ubuntu | `sudo apt install protobuf-compiler` |
|
|
2125
|
+
| Fedora/RHEL | `sudo dnf install protobuf-compiler` |
|
|
2126
|
+
| Arch | `sudo pacman -S protobuf` |
|
|
2127
|
+
| Windows | `choco install protoc` (or [download a release](https://github.com/protocolbuffers/protobuf/releases)) |
|
|
1976
2128
|
|
|
1977
2129
|
Example:
|
|
1978
2130
|
|
|
@@ -2124,9 +2276,9 @@ Create a data contract based on the actual data. This is the fastest way to get
|
|
|
2124
2276
|
|
|
2125
2277
|
4. Set up a CI pipeline that executes daily for continuous quality checks. Use the [`ci`](#ci) command for
|
|
2126
2278
|
CI-optimized output (GitHub Actions annotations and step summary, Azure DevOps annotations).
|
|
2127
|
-
You can also report the test results to tools like [Data
|
|
2279
|
+
You can also report the test results to tools like [Entropy Data](https://entropy-data.com).
|
|
2128
2280
|
```bash
|
|
2129
|
-
$ datacontract ci --publish https://api.
|
|
2281
|
+
$ datacontract ci --publish https://api.entropy-data.com/api/test-results
|
|
2130
2282
|
```
|
|
2131
2283
|
|
|
2132
2284
|
### Contract-First
|
|
@@ -126,6 +126,9 @@ $ datacontract changelog v1.odcs.yaml v2.odcs.yaml
|
|
|
126
126
|
# execute schema and quality checks (define credentials as environment variables)
|
|
127
127
|
$ datacontract test odcs.yaml
|
|
128
128
|
|
|
129
|
+
# generate dbt tests from a contract into your dbt project and run `dbt test`
|
|
130
|
+
$ datacontract dbt sync orders.odcs.yaml --project-dir ./warehouse
|
|
131
|
+
|
|
129
132
|
# export data contract as html (other formats: avro, dbt-models, dbt-sources, dbt-staging-sql, jsonschema, odcs, rdf, sql, sodacl, terraform, ...)
|
|
130
133
|
$ datacontract export html datacontract.yaml --output odcs.html
|
|
131
134
|
|
|
@@ -241,23 +244,26 @@ A list of available extras:
|
|
|
241
244
|
| Amazon Athena | `pip install datacontract-cli[athena]` |
|
|
242
245
|
| Avro Support | `pip install datacontract-cli[avro]` |
|
|
243
246
|
| Google BigQuery | `pip install datacontract-cli[bigquery]` |
|
|
247
|
+
| CSV | `pip install datacontract-cli[csv]` |
|
|
244
248
|
| Databricks Integration | `pip install datacontract-cli[databricks]` |
|
|
249
|
+
| DBML | `pip install datacontract-cli[dbml]` |
|
|
245
250
|
| DuckDB (local/S3/GCS/Azure file testing) | `pip install datacontract-cli[duckdb]` |
|
|
251
|
+
| Excel | `pip install datacontract-cli[excel]` |
|
|
246
252
|
| Iceberg | `pip install datacontract-cli[iceberg]` |
|
|
253
|
+
| Impala | `pip install datacontract-cli[impala]` |
|
|
247
254
|
| Kafka Integration | `pip install datacontract-cli[kafka]` |
|
|
248
255
|
| MySQL Integration | `pip install datacontract-cli[mysql]` |
|
|
256
|
+
| Oracle | `pip install datacontract-cli[oracle]` |
|
|
257
|
+
| Parquet | `pip install datacontract-cli[parquet]` |
|
|
249
258
|
| PostgreSQL Integration | `pip install datacontract-cli[postgres]` |
|
|
259
|
+
| protobuf | `pip install datacontract-cli[protobuf]` |
|
|
260
|
+
| RDF | `pip install datacontract-cli[rdf]` |
|
|
261
|
+
| Amazon Redshift | `pip install datacontract-cli[redshift]` |
|
|
250
262
|
| S3 Integration | `pip install datacontract-cli[s3]` |
|
|
251
263
|
| Snowflake Integration | `pip install datacontract-cli[snowflake]` |
|
|
252
264
|
| Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
|
|
253
265
|
| Trino | `pip install datacontract-cli[trino]` |
|
|
254
|
-
| Impala | `pip install datacontract-cli[impala]` |
|
|
255
|
-
| dbt | `pip install datacontract-cli[dbt]` |
|
|
256
|
-
| DBML | `pip install datacontract-cli[dbml]` |
|
|
257
|
-
| Parquet | `pip install datacontract-cli[parquet]` |
|
|
258
|
-
| RDF | `pip install datacontract-cli[rdf]` |
|
|
259
266
|
| API (run as web server) | `pip install datacontract-cli[api]` |
|
|
260
|
-
| protobuf | `pip install datacontract-cli[protobuf]` |
|
|
261
267
|
|
|
262
268
|
|
|
263
269
|
## Documentation
|
|
@@ -268,6 +274,7 @@ Commands
|
|
|
268
274
|
- [lint](#lint)
|
|
269
275
|
- [changelog](#changelog)
|
|
270
276
|
- [test](#test)
|
|
277
|
+
- [dbt](#dbt-sync)
|
|
271
278
|
- [ci](#ci)
|
|
272
279
|
- [export](#export)
|
|
273
280
|
- [import](#import)
|
|
@@ -338,13 +345,19 @@ Commands
|
|
|
338
345
|
Show a changelog between two data contracts.
|
|
339
346
|
|
|
340
347
|
╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────╮
|
|
341
|
-
│ * v1 TEXT The location (path) of the source (before) data contract YAML.
|
|
342
|
-
│
|
|
348
|
+
│ * v1 TEXT The location (url or path) of the source (before) data contract YAML. │
|
|
349
|
+
│ [required] │
|
|
350
|
+
│ * v2 TEXT The location (url or path) of the target (after) data contract YAML. │
|
|
351
|
+
│ [required] │
|
|
343
352
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
344
353
|
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
|
|
345
354
|
│ --debug --no-debug Enable debug logging │
|
|
346
355
|
│ --help Show this message and exit. │
|
|
347
356
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
357
|
+
|
|
358
|
+
Example: datacontract changelog datacontract-v1.yaml datacontract-v2.yaml
|
|
359
|
+
|
|
360
|
+
|
|
348
361
|
```
|
|
349
362
|
|
|
350
363
|
```bash
|
|
@@ -938,6 +951,52 @@ models:
|
|
|
938
951
|
|
|
939
952
|
</details>
|
|
940
953
|
|
|
954
|
+
<details markdown="1">
|
|
955
|
+
<summary><strong>Amazon Redshift</strong></summary>
|
|
956
|
+
|
|
957
|
+
Data Contract CLI can test data in Amazon Redshift (both provisioned clusters and Redshift Serverless).
|
|
958
|
+
|
|
959
|
+
##### Example
|
|
960
|
+
|
|
961
|
+
datacontract.yaml
|
|
962
|
+
```yaml
|
|
963
|
+
servers:
|
|
964
|
+
redshift:
|
|
965
|
+
type: redshift
|
|
966
|
+
host: my-workgroup.123456789012.us-east-1.redshift-serverless.amazonaws.com
|
|
967
|
+
port: 5439
|
|
968
|
+
database: dev
|
|
969
|
+
schema: analytics
|
|
970
|
+
models:
|
|
971
|
+
my_table_1: # corresponds to a table
|
|
972
|
+
type: table
|
|
973
|
+
fields:
|
|
974
|
+
my_column_1: # corresponds to a column
|
|
975
|
+
type: varchar
|
|
976
|
+
```
|
|
977
|
+
|
|
978
|
+
##### Environment Variables
|
|
979
|
+
All [parameters supported by Soda](https://docs.soda.io/soda/connect-redshift.html), uppercased and prepended by `DATACONTRACT_REDSHIFT_` prefix.
|
|
980
|
+
For example:
|
|
981
|
+
|
|
982
|
+
| Soda parameter | Environment Variable | Details |
|
|
983
|
+
|---------------------|-------------------------------------------|---------------------|
|
|
984
|
+
| `username` | `DATACONTRACT_REDSHIFT_USERNAME` | |
|
|
985
|
+
| `password` | `DATACONTRACT_REDSHIFT_PASSWORD` | leave unset for IAM |
|
|
986
|
+
| `region` | `DATACONTRACT_REDSHIFT_REGION` | for IAM |
|
|
987
|
+
| `access_key_id` | `DATACONTRACT_REDSHIFT_ACCESS_KEY_ID` | for IAM |
|
|
988
|
+
| `secret_access_key` | `DATACONTRACT_REDSHIFT_SECRET_ACCESS_KEY` | for IAM |
|
|
989
|
+
| `role_arn` | `DATACONTRACT_REDSHIFT_ROLE_ARN` | for IAM |
|
|
990
|
+
|
|
991
|
+
IAM credentials can be supplied in two ways:
|
|
992
|
+
|
|
993
|
+
1. **AWS_PROFILE** — set `AWS_PROFILE` in your shell to a profile defined in `~/.aws/credentials` and `DATACONTRACT_REDSHIFT_REGION`.
|
|
994
|
+
2. **Explicit keys** — set `DATACONTRACT_REDSHIFT_REGION`, `..._ACCESS_KEY_ID`, `..._SECRET_ACCESS_KEY`, and `..._SESSION_TOKEN` for temporary credentials, or `..._ROLE_ARN` to assume a role.
|
|
995
|
+
|
|
996
|
+
>IAM authentication is supported only for **provisioned** Redshift clusters.
|
|
997
|
+
|
|
998
|
+
</details>
|
|
999
|
+
|
|
941
1000
|
<details markdown="1">
|
|
942
1001
|
<summary><strong>MySQL</strong></summary>
|
|
943
1002
|
|
|
@@ -1117,6 +1176,84 @@ models:
|
|
|
1117
1176
|
|
|
1118
1177
|
</details>
|
|
1119
1178
|
|
|
1179
|
+
### dbt sync
|
|
1180
|
+
> The `dbt sync` command is still work in progress and will receive further functionality and documentation soon.
|
|
1181
|
+
```
|
|
1182
|
+
|
|
1183
|
+
Usage: datacontract dbt sync [OPTIONS] [CONTRACT]
|
|
1184
|
+
|
|
1185
|
+
Generate dbt tests from an ODCS contract and run them.
|
|
1186
|
+
|
|
1187
|
+
Within the specified dbt project, this command wipes `<model-paths>/datacontract_cli/` and
|
|
1188
|
+
`<test-paths>/datacontract_cli/`, regenerates them from the contract, then runs `dbt test`.
|
|
1189
|
+
|
|
1190
|
+
╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────╮
|
|
1191
|
+
│ contract [CONTRACT] Path to the ODCS data contract. If omitted, searches for a single │
|
|
1192
|
+
│ `*.odcs.yaml` in the current directory and its subdirectories. │
|
|
1193
|
+
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
1194
|
+
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
|
|
1195
|
+
│ --project-dir PATH Path to the dbt project root │
|
|
1196
|
+
│ (must contain │
|
|
1197
|
+
│ `dbt_project.yml`). Defaults │
|
|
1198
|
+
│ to the current directory. │
|
|
1199
|
+
│ --schema-name TEXT Which ODCS schema object to │
|
|
1200
|
+
│ sync, by name. │
|
|
1201
|
+
│ [default: all] │
|
|
1202
|
+
│ --model-resolution [name|physicalName] How to map an ODCS schema to │
|
|
1203
|
+
│ a dbt model name. │
|
|
1204
|
+
│ [default: name] │
|
|
1205
|
+
│ --target TEXT Forwarded to `dbt test │
|
|
1206
|
+
│ --target`. │
|
|
1207
|
+
│ --profiles-dir PATH Forwarded to `dbt test │
|
|
1208
|
+
│ --profiles-dir`. │
|
|
1209
|
+
│ --skip-tests --run-tests Generate tests but skip │
|
|
1210
|
+
│ running `dbt test`. │
|
|
1211
|
+
│ [default: run-tests] │
|
|
1212
|
+
│ --publish TEXT The url to publish the │
|
|
1213
|
+
│ results after the test. │
|
|
1214
|
+
│ --server TEXT ODCS server name for │
|
|
1215
|
+
│ published test results. │
|
|
1216
|
+
│ Auto-selected if the │
|
|
1217
|
+
│ contract contains only one │
|
|
1218
|
+
│ server. Otherwise defaults │
|
|
1219
|
+
│ to --target. │
|
|
1220
|
+
│ --ssl-verification --no-ssl-verification SSL verification when │
|
|
1221
|
+
│ publishing test results. │
|
|
1222
|
+
│ [default: ssl-verification] │
|
|
1223
|
+
│ --debug --no-debug Enable debug logging │
|
|
1224
|
+
│ --help Show this message and exit. │
|
|
1225
|
+
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
1226
|
+
|
|
1227
|
+
Example: datacontract dbt sync orders.odcs.yaml --project-dir ./warehouse
|
|
1228
|
+
|
|
1229
|
+
|
|
1230
|
+
```
|
|
1231
|
+
|
|
1232
|
+
`datacontract dbt sync` generates dbt tests from an ODCS data contract directly into your dbt project and (by default) runs `dbt test` against them. The contract becomes the single source of truth for column-level constraints and quality checks. It is recommended to remove existing dbt tests to avoid duplication.
|
|
1233
|
+
|
|
1234
|
+
On each run, the command:
|
|
1235
|
+
|
|
1236
|
+
- **Wipes and regenerates** the `models/datacontract_cli/` and `tests/datacontract_cli/` directories under your dbt project. The paths honor `model-paths` and `test-paths` in `dbt_project.yml`.
|
|
1237
|
+
- **Emits one YAML model file per ODCS schema** that uses dbt's built-in tests and [`dbt_utils`](https://github.com/dbt-labs/dbt-utils).
|
|
1238
|
+
- **Emits singular SQL tests** for all ODCS `quality` that can't be expressed as native YAML tests.
|
|
1239
|
+
- **Runs `dbt test --select tag:datacontract_cli`** to run the generated tests; pre-existing dbt tests are untouched. Pass `--skip-tests` to regenerate without invoking dbt.
|
|
1240
|
+
|
|
1241
|
+
Prerequisites: `dbt-core` plus an adapter (e.g. `dbt-duckdb`, `dbt-postgres`) on `PATH`, [`dbt_utils`](https://github.com/dbt-labs/dbt-utils) installed in your dbt project's `packages.yml`.
|
|
1242
|
+
|
|
1243
|
+
```bash
|
|
1244
|
+
# Auto-discover a contract named *.odcs.yaml in a dbt project
|
|
1245
|
+
$ datacontract dbt sync
|
|
1246
|
+
|
|
1247
|
+
# Explicit contract, run against a specific dbt target
|
|
1248
|
+
$ datacontract dbt sync orders.odcs.yaml --project-dir ./warehouse --target dev
|
|
1249
|
+
|
|
1250
|
+
# Only generate dbt tests, don't run them
|
|
1251
|
+
$ datacontract dbt sync orders.odcs.yaml --skip-tests
|
|
1252
|
+
|
|
1253
|
+
# Run and publish results to an Entropy Data instance
|
|
1254
|
+
$ datacontract dbt sync orders.odcs.yaml --publish https://api.entropy-data.com/api/test-results
|
|
1255
|
+
```
|
|
1256
|
+
|
|
1120
1257
|
### ci
|
|
1121
1258
|
```
|
|
1122
1259
|
|
|
@@ -1167,6 +1304,9 @@ models:
|
|
|
1167
1304
|
│ --help Show this message and │
|
|
1168
1305
|
│ exit. │
|
|
1169
1306
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
1307
|
+
|
|
1308
|
+
Example: datacontract ci datacontract.yaml --output test-results.xml --output-format junit
|
|
1309
|
+
|
|
1170
1310
|
|
|
1171
1311
|
```
|
|
1172
1312
|
|
|
@@ -1291,7 +1431,7 @@ steps:
|
|
|
1291
1431
|
|
|
1292
1432
|
Example: datacontract export html datacontract.yaml --output datacontract.html
|
|
1293
1433
|
For SQL dialects (postgres, mysql, snowflake, databricks, sqlserver, trino, oracle), use
|
|
1294
|
-
`datacontract export sql --dialect <dialect>`.
|
|
1434
|
+
`datacontract export sql --dialect <dialect>`.
|
|
1295
1435
|
|
|
1296
1436
|
|
|
1297
1437
|
```
|
|
@@ -1638,9 +1778,9 @@ For more information about the Excel template structure, visit the [ODCS Excel T
|
|
|
1638
1778
|
│ --help Show this message and exit. │
|
|
1639
1779
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
1640
1780
|
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────╮
|
|
1781
|
+
│ dbt Import a data contract from a dbt manifest file. │
|
|
1641
1782
|
│ sql Import a data contract from a SQL DDL file. │
|
|
1642
1783
|
│ avro Import a data contract from an Avro schema file. │
|
|
1643
|
-
│ dbt Import a data contract from a dbt manifest file. │
|
|
1644
1784
|
│ dbml Import a data contract from a DBML file. │
|
|
1645
1785
|
│ glue Import a data contract from AWS Glue. │
|
|
1646
1786
|
│ bigquery Import a data contract from BigQuery. │
|
|
@@ -1868,7 +2008,17 @@ datacontract import csv --source "test.csv"
|
|
|
1868
2008
|
<details markdown="1">
|
|
1869
2009
|
<summary><strong>protobuf</strong></summary>
|
|
1870
2010
|
|
|
1871
|
-
Importing from protobuf File. Specify file in `source` parameter.
|
|
2011
|
+
Importing from protobuf File. Specify file in `source` parameter.
|
|
2012
|
+
|
|
2013
|
+
Requires the `protoc` compiler installed on the system. Install with:
|
|
2014
|
+
|
|
2015
|
+
| Platform | Command |
|
|
2016
|
+
|----------------|--------------------------------------|
|
|
2017
|
+
| macOS | `brew install protobuf` |
|
|
2018
|
+
| Debian/Ubuntu | `sudo apt install protobuf-compiler` |
|
|
2019
|
+
| Fedora/RHEL | `sudo dnf install protobuf-compiler` |
|
|
2020
|
+
| Arch | `sudo pacman -S protobuf` |
|
|
2021
|
+
| Windows | `choco install protoc` (or [download a release](https://github.com/protocolbuffers/protobuf/releases)) |
|
|
1872
2022
|
|
|
1873
2023
|
Example:
|
|
1874
2024
|
|
|
@@ -2020,9 +2170,9 @@ Create a data contract based on the actual data. This is the fastest way to get
|
|
|
2020
2170
|
|
|
2021
2171
|
4. Set up a CI pipeline that executes daily for continuous quality checks. Use the [`ci`](#ci) command for
|
|
2022
2172
|
CI-optimized output (GitHub Actions annotations and step summary, Azure DevOps annotations).
|
|
2023
|
-
You can also report the test results to tools like [Data
|
|
2173
|
+
You can also report the test results to tools like [Entropy Data](https://entropy-data.com).
|
|
2024
2174
|
```bash
|
|
2025
|
-
$ datacontract ci --publish https://api.
|
|
2175
|
+
$ datacontract ci --publish https://api.entropy-data.com/api/test-results
|
|
2026
2176
|
```
|
|
2027
2177
|
|
|
2028
2178
|
### Contract-First
|