datacontract-cli 0.11.1__tar.gz → 0.11.2__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.11.1/datacontract_cli.egg-info → datacontract_cli-0.11.2}/PKG-INFO +76 -41
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/README.md +69 -34
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/check_soda_execute.py +14 -1
- datacontract_cli-0.11.2/datacontract/engines/soda/connections/impala.py +74 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/sql_type_converter.py +59 -1
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2/datacontract_cli.egg-info}/PKG-INFO +76 -41
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract_cli.egg-info/SOURCES.txt +1 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract_cli.egg-info/requires.txt +6 -6
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/pyproject.toml +7 -7
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/LICENSE +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/MANIFEST.in +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/__init__.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/api.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/catalog/catalog.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/cli.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/data_contract.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/__init__.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/data_contract_checks.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/data_contract_test.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/__init__.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/athena.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/bigquery.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/databricks.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/duckdb_connection.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/kafka.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/oracle.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/postgres.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/snowflake.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/sqlserver.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/trino.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/__init__.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/avro_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/avro_idl_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/bigquery_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/custom_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/data_caterer_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/dbml_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/dbt_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/dcs_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/dqx_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/duckdb_type_converter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/excel_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/exporter_factory.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/go_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/great_expectations_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/html_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/iceberg_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/jsonschema_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/markdown_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/mermaid_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/odcs_export_helper.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/odcs_v3_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/pandas_type_converter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/protobuf_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/pydantic_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/rdf_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/sodacl_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/spark_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/sql_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/sqlalchemy_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/avro_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/bigquery_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/csv_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/dbml_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/dbt_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/dcs_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/excel_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/glue_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/iceberg_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/importer_factory.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/json_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/jsonschema_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/odcs_helper.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/odcs_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/parquet_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/protobuf_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/spark_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/sql_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/unity_importer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/init/init_template.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/integration/entropy_data.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/lint/files.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/lint/resolve.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/lint/resources.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/lint/schema.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/lint/urls.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/model/exceptions.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/model/odcs.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/model/run.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/output/__init__.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/output/junit_test_results.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/output/output_format.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/output/test_results_writer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/py.typed +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/datacontract-1.2.1.init.yaml +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/datacontract-1.2.1.schema.json +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/odcs-3.0.2.schema.json +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/odcs-3.1.0.schema.json +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/datacontract.html +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/datacontract_odcs.html +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/index.html +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/datacontract_information.html +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/datacontract_terms.html +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/definition.html +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/example.html +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/model_field.html +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/quality.html +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/server.html +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/style/output.css +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract_cli.egg-info/dependency_links.txt +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract_cli.egg-info/entry_points.txt +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract_cli.egg-info/top_level.txt +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/setup.cfg +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_api.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_catalog.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_cli.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_data_contract_checks.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_data_contract_specification.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_description_linter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_download_datacontract_file.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_duckdb_json.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_avro.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_avro_idl.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_bigquery.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_complex_data_contract.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_custom.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_custom_exporter.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_data_caterer.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_dbml.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_dbt_models.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_dbt_sources.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_dbt_staging_sql.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_dqx.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_excel.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_go.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_great_expectations.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_html.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_iceberg.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_jsonschema.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_markdown.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_mermaid.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_odcs_v3.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_protobuf.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_pydantic.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_rdf.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_sodacl.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_spark.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_sql.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_sql_query.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_sqlalchemy.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_avro.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_bigquery.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_csv.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_dbml.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_dbt.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_excel.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_glue.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_iceberg.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_json.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_jsonschema.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_odcs_v3.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_parquet.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_protobuf.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_spark.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_sql_oracle.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_sql_postgres.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_sql_sqlserver.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_unity_file.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_integration_entropydata.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_lint.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_resolve.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_roundtrip_jsonschema.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_api.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_athena_iceberg.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_azure_remote.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_bigquery.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_databricks.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_dataframe.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_delta.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_gcs_csv_remote.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_gcs_json_remote.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_kafka.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_kafka_remote.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_local_json.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_local_json_nd.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_oracle.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_output_junit.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_parquet.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_postgres.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_quality.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_s3_csv.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_s3_delta.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_s3_json.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_s3_json_complex.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_s3_json_multiple_models.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_s3_json_remote.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_snowflake.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_sqlserver.py +0 -0
- {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/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.11.
|
|
3
|
+
Version: 0.11.2
|
|
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
|
|
@@ -20,8 +20,8 @@ Requires-Dist: fastparquet<2025.0.0,>=2024.5.0
|
|
|
20
20
|
Requires-Dist: numpy<2.0.0,>=1.26.4
|
|
21
21
|
Requires-Dist: python-multipart<1.0.0,>=0.0.20
|
|
22
22
|
Requires-Dist: rich<15.0,>=13.7
|
|
23
|
-
Requires-Dist: sqlglot<
|
|
24
|
-
Requires-Dist: duckdb<
|
|
23
|
+
Requires-Dist: sqlglot<29.0.0,>=26.6.0
|
|
24
|
+
Requires-Dist: duckdb<1.4.0,>=1.0.0
|
|
25
25
|
Requires-Dist: soda-core-duckdb<3.6.0,>=3.3.20
|
|
26
26
|
Requires-Dist: setuptools>=60
|
|
27
27
|
Requires-Dist: python-dotenv<2.0.0,>=1.0.0
|
|
@@ -41,7 +41,7 @@ Requires-Dist: openpyxl<4.0.0,>=3.1.5; extra == "excel"
|
|
|
41
41
|
Provides-Extra: databricks
|
|
42
42
|
Requires-Dist: soda-core-spark-df<3.6.0,>=3.3.20; extra == "databricks"
|
|
43
43
|
Requires-Dist: soda-core-spark[databricks]<3.6.0,>=3.3.20; extra == "databricks"
|
|
44
|
-
Requires-Dist: databricks-sql-connector<4.
|
|
44
|
+
Requires-Dist: databricks-sql-connector<4.3.0,>=3.7.0; extra == "databricks"
|
|
45
45
|
Requires-Dist: databricks-sdk<0.74.0; extra == "databricks"
|
|
46
46
|
Requires-Dist: pyspark<4.0.0,>=3.5.5; extra == "databricks"
|
|
47
47
|
Provides-Extra: iceberg
|
|
@@ -56,7 +56,7 @@ Provides-Extra: s3
|
|
|
56
56
|
Requires-Dist: s3fs<2026.0.0,>=2025.2.0; extra == "s3"
|
|
57
57
|
Requires-Dist: aiobotocore<2.26.0,>=2.17.0; extra == "s3"
|
|
58
58
|
Provides-Extra: snowflake
|
|
59
|
-
Requires-Dist: snowflake-connector-python[pandas]<4.
|
|
59
|
+
Requires-Dist: snowflake-connector-python[pandas]<4.2,>=3.6; extra == "snowflake"
|
|
60
60
|
Requires-Dist: soda-core-snowflake<3.6.0,>=3.3.20; extra == "snowflake"
|
|
61
61
|
Provides-Extra: sqlserver
|
|
62
62
|
Requires-Dist: soda-core-sqlserver<3.6.0,>=3.3.20; extra == "sqlserver"
|
|
@@ -86,9 +86,9 @@ Requires-Dist: datacontract-cli[all]; extra == "dev"
|
|
|
86
86
|
Requires-Dist: httpx==0.28.1; extra == "dev"
|
|
87
87
|
Requires-Dist: kafka-python; extra == "dev"
|
|
88
88
|
Requires-Dist: minio==7.2.17; extra == "dev"
|
|
89
|
-
Requires-Dist: moto==5.1.
|
|
89
|
+
Requires-Dist: moto==5.1.18; extra == "dev"
|
|
90
90
|
Requires-Dist: pandas>=2.1.0; extra == "dev"
|
|
91
|
-
Requires-Dist: pre-commit<4.
|
|
91
|
+
Requires-Dist: pre-commit<4.6.0,>=3.7.1; extra == "dev"
|
|
92
92
|
Requires-Dist: pytest; extra == "dev"
|
|
93
93
|
Requires-Dist: pytest-xdist; extra == "dev"
|
|
94
94
|
Requires-Dist: pymssql==2.3.9; extra == "dev"
|
|
@@ -120,7 +120,7 @@ It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a P
|
|
|
120
120
|
Let's look at this data contract:
|
|
121
121
|
[https://datacontract.com/orders-v1.odcs.yaml](https://datacontract.com/orders-v1.odcs.yaml)
|
|
122
122
|
|
|
123
|
-
We have a _servers_ section with endpoint details to a Postgres database, _schema_ for the structure and semantics of the data,
|
|
123
|
+
We have a _servers_ section with endpoint details to a Postgres database, _schema_ for the structure and semantics of the data, _service levels_ and _quality_ attributes that describe the expected freshness and number of rows.
|
|
124
124
|
|
|
125
125
|
This data contract contains all information to connect to the database and check that the actual data meets the defined schema specification and quality expectations.
|
|
126
126
|
We can use this information to test if the actual data product is compliant to the data contract.
|
|
@@ -342,6 +342,7 @@ A list of available extras:
|
|
|
342
342
|
| Snowflake Integration | `pip install datacontract-cli[snowflake]` |
|
|
343
343
|
| Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
|
|
344
344
|
| Trino | `pip install datacontract-cli[trino]` |
|
|
345
|
+
| Impala | `pip install datacontract-cli[impala]` |
|
|
345
346
|
| dbt | `pip install datacontract-cli[dbt]` |
|
|
346
347
|
| DBML | `pip install datacontract-cli[dbml]` |
|
|
347
348
|
| Parquet | `pip install datacontract-cli[parquet]` |
|
|
@@ -493,6 +494,7 @@ Supported server types:
|
|
|
493
494
|
- [kafka](#kafka)
|
|
494
495
|
- [postgres](#postgres)
|
|
495
496
|
- [trino](#trino)
|
|
497
|
+
- [impala](#impala)
|
|
496
498
|
- [api](#api)
|
|
497
499
|
- [local](#local)
|
|
498
500
|
|
|
@@ -1023,6 +1025,53 @@ models:
|
|
|
1023
1025
|
| `DATACONTRACT_TRINO_PASSWORD` | `mysecretpassword` | Password |
|
|
1024
1026
|
|
|
1025
1027
|
|
|
1028
|
+
#### Impala
|
|
1029
|
+
|
|
1030
|
+
Data Contract CLI can run Soda checks against an Apache Impala cluster.
|
|
1031
|
+
|
|
1032
|
+
##### Example
|
|
1033
|
+
|
|
1034
|
+
datacontract.yaml
|
|
1035
|
+
```yaml
|
|
1036
|
+
servers:
|
|
1037
|
+
impala:
|
|
1038
|
+
type: impala
|
|
1039
|
+
host: my-impala-host
|
|
1040
|
+
port: 443
|
|
1041
|
+
# Optional default database used for Soda scans
|
|
1042
|
+
database: my_database
|
|
1043
|
+
models:
|
|
1044
|
+
my_table_1: # corresponds to a table
|
|
1045
|
+
type: table
|
|
1046
|
+
# fields as usual …
|
|
1047
|
+
```
|
|
1048
|
+
|
|
1049
|
+
##### Environment Variables
|
|
1050
|
+
|
|
1051
|
+
| Environment Variable | Example | Description |
|
|
1052
|
+
|------------------------------- |-------------------- |------------- |
|
|
1053
|
+
| `DATACONTRACT_IMPALA_USERNAME` | `analytics_user` | Username used to connect to Impala |
|
|
1054
|
+
| `DATACONTRACT_IMPALA_PASSWORD` | `mysecretpassword` | Password for the Impala user |
|
|
1055
|
+
| `DATACONTRACT_IMPALA_USE_SSL` | `true` | Whether to use SSL; defaults to true if unset |
|
|
1056
|
+
| `DATACONTRACT_IMPALA_AUTH_MECHANISM` | `LDAP` | Authentication mechanism; defaults to LDAP |
|
|
1057
|
+
| `DATACONTRACT_IMPALA_USE_HTTP_TRANSPORT` | `true` | Whether to use the HTTP transport; defaults to true |
|
|
1058
|
+
| `DATACONTRACT_IMPALA_HTTP_PATH` | `cliservice` | HTTP path for the Impala service; defaults to cliservice |
|
|
1059
|
+
|
|
1060
|
+
### Type-mapping note (logicalType → Impala type)
|
|
1061
|
+
|
|
1062
|
+
If `physicalType` is not specified in the schema, we recommend the following mapping from `logicalType` to Impala column types:
|
|
1063
|
+
|
|
1064
|
+
|logicalType | Recommended Impala type |
|
|
1065
|
+
|------------|-------------------------|
|
|
1066
|
+
| `integer` | `INT` or `BIGINT` |
|
|
1067
|
+
| `number` | `DOUBLE`/`decimal(..)` |
|
|
1068
|
+
| `string` | `STRING` or `VARCHAR` |
|
|
1069
|
+
| `boolean` | `BOOLEAN` |
|
|
1070
|
+
| `date` | `DATE` |
|
|
1071
|
+
| `datetime` | `TIMESTAMP` |
|
|
1072
|
+
|
|
1073
|
+
This keeps the Impala schema compatible with the expectations of the Soda checks generated by datacontract-cli.
|
|
1074
|
+
|
|
1026
1075
|
#### API
|
|
1027
1076
|
|
|
1028
1077
|
Data Contract CLI can test APIs that return data in JSON format.
|
|
@@ -1569,38 +1618,25 @@ datacontract import --format sql --source my_ddl.sql --dialect postgres --output
|
|
|
1569
1618
|
|
|
1570
1619
|
Available import options:
|
|
1571
1620
|
|
|
1572
|
-
| Type | Description
|
|
1573
|
-
|
|
1574
|
-
| `avro` | Import from AVRO schemas
|
|
1575
|
-
| `bigquery` | Import from BigQuery Schemas
|
|
1576
|
-
| `csv` | Import from CSV File
|
|
1577
|
-
| `dbml` | Import from DBML models
|
|
1578
|
-
| `dbt` | Import from dbt models
|
|
1579
|
-
| `excel` | Import from ODCS Excel Template
|
|
1580
|
-
| `glue` | Import from AWS Glue DataCatalog
|
|
1581
|
-
| `iceberg` | Import from an Iceberg JSON Schema Definition
|
|
1582
|
-
| `jsonschema` | Import from JSON Schemas
|
|
1583
|
-
| `
|
|
1584
|
-
| `
|
|
1585
|
-
| `
|
|
1586
|
-
| `
|
|
1587
|
-
| `
|
|
1588
|
-
| `
|
|
1589
|
-
|
|
|
1590
|
-
| Missing something? | Please create an issue on GitHub | TBD |
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
#### ODCS
|
|
1594
|
-
|
|
1595
|
-
Import from Open Data Contract Standard (ODCS) v2 or v3.
|
|
1596
|
-
The importer automatically detects the ODCS version and imports the data contract.
|
|
1597
|
-
|
|
1598
|
-
Examples:
|
|
1621
|
+
| Type | Description | Status |
|
|
1622
|
+
|--------------------|-----------------------------------------------|---------|
|
|
1623
|
+
| `avro` | Import from AVRO schemas | ✅ |
|
|
1624
|
+
| `bigquery` | Import from BigQuery Schemas | ✅ |
|
|
1625
|
+
| `csv` | Import from CSV File | ✅ |
|
|
1626
|
+
| `dbml` | Import from DBML models | ✅ |
|
|
1627
|
+
| `dbt` | Import from dbt models | ✅ |
|
|
1628
|
+
| `excel` | Import from ODCS Excel Template | ✅ |
|
|
1629
|
+
| `glue` | Import from AWS Glue DataCatalog | ✅ |
|
|
1630
|
+
| `iceberg` | Import from an Iceberg JSON Schema Definition | partial |
|
|
1631
|
+
| `jsonschema` | Import from JSON Schemas | ✅ |
|
|
1632
|
+
| `parquet` | Import from Parquet File Metadata | ✅ |
|
|
1633
|
+
| `protobuf` | Import from Protobuf schemas | ✅ |
|
|
1634
|
+
| `spark` | Import from Spark StructTypes, Variant | ✅ |
|
|
1635
|
+
| `sql` | Import from SQL DDL | ✅ |
|
|
1636
|
+
| `unity` | Import from Databricks Unity Catalog | partial |
|
|
1637
|
+
| `excel` | Import from ODCS Excel Template | ✅ |
|
|
1638
|
+
| Missing something? | Please create an issue on GitHub | TBD |
|
|
1599
1639
|
|
|
1600
|
-
```bash
|
|
1601
|
-
# Example import from ODCS
|
|
1602
|
-
datacontract import --format odcs --source my_data_contract.odcs.yaml
|
|
1603
|
-
```
|
|
1604
1640
|
|
|
1605
1641
|
#### BigQuery
|
|
1606
1642
|
|
|
@@ -2202,8 +2238,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
|
|
|
2202
2238
|
|
|
2203
2239
|
## Related Tools
|
|
2204
2240
|
|
|
2205
|
-
- [Data
|
|
2206
|
-
- [Data Contract GPT](https://gpt.datacontract.com) is a custom GPT that can help you write data contracts.
|
|
2241
|
+
- [Entropy Data](https://www.entropy-data.com/) is a commercial tool to manage data contracts. It contains a web UI, access management, and data governance for a data product marketplace based on data contracts.
|
|
2207
2242
|
- [Data Contract Editor](https://editor.datacontract.com) is an editor for Data Contracts, including a live html preview.
|
|
2208
2243
|
- [Data Contract Playground](https://data-catering.github.io/data-contract-playground/) allows you to validate and export your data contract to different formats within your browser.
|
|
2209
2244
|
|
|
@@ -21,7 +21,7 @@ It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a P
|
|
|
21
21
|
Let's look at this data contract:
|
|
22
22
|
[https://datacontract.com/orders-v1.odcs.yaml](https://datacontract.com/orders-v1.odcs.yaml)
|
|
23
23
|
|
|
24
|
-
We have a _servers_ section with endpoint details to a Postgres database, _schema_ for the structure and semantics of the data,
|
|
24
|
+
We have a _servers_ section with endpoint details to a Postgres database, _schema_ for the structure and semantics of the data, _service levels_ and _quality_ attributes that describe the expected freshness and number of rows.
|
|
25
25
|
|
|
26
26
|
This data contract contains all information to connect to the database and check that the actual data meets the defined schema specification and quality expectations.
|
|
27
27
|
We can use this information to test if the actual data product is compliant to the data contract.
|
|
@@ -243,6 +243,7 @@ A list of available extras:
|
|
|
243
243
|
| Snowflake Integration | `pip install datacontract-cli[snowflake]` |
|
|
244
244
|
| Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
|
|
245
245
|
| Trino | `pip install datacontract-cli[trino]` |
|
|
246
|
+
| Impala | `pip install datacontract-cli[impala]` |
|
|
246
247
|
| dbt | `pip install datacontract-cli[dbt]` |
|
|
247
248
|
| DBML | `pip install datacontract-cli[dbml]` |
|
|
248
249
|
| Parquet | `pip install datacontract-cli[parquet]` |
|
|
@@ -394,6 +395,7 @@ Supported server types:
|
|
|
394
395
|
- [kafka](#kafka)
|
|
395
396
|
- [postgres](#postgres)
|
|
396
397
|
- [trino](#trino)
|
|
398
|
+
- [impala](#impala)
|
|
397
399
|
- [api](#api)
|
|
398
400
|
- [local](#local)
|
|
399
401
|
|
|
@@ -924,6 +926,53 @@ models:
|
|
|
924
926
|
| `DATACONTRACT_TRINO_PASSWORD` | `mysecretpassword` | Password |
|
|
925
927
|
|
|
926
928
|
|
|
929
|
+
#### Impala
|
|
930
|
+
|
|
931
|
+
Data Contract CLI can run Soda checks against an Apache Impala cluster.
|
|
932
|
+
|
|
933
|
+
##### Example
|
|
934
|
+
|
|
935
|
+
datacontract.yaml
|
|
936
|
+
```yaml
|
|
937
|
+
servers:
|
|
938
|
+
impala:
|
|
939
|
+
type: impala
|
|
940
|
+
host: my-impala-host
|
|
941
|
+
port: 443
|
|
942
|
+
# Optional default database used for Soda scans
|
|
943
|
+
database: my_database
|
|
944
|
+
models:
|
|
945
|
+
my_table_1: # corresponds to a table
|
|
946
|
+
type: table
|
|
947
|
+
# fields as usual …
|
|
948
|
+
```
|
|
949
|
+
|
|
950
|
+
##### Environment Variables
|
|
951
|
+
|
|
952
|
+
| Environment Variable | Example | Description |
|
|
953
|
+
|------------------------------- |-------------------- |------------- |
|
|
954
|
+
| `DATACONTRACT_IMPALA_USERNAME` | `analytics_user` | Username used to connect to Impala |
|
|
955
|
+
| `DATACONTRACT_IMPALA_PASSWORD` | `mysecretpassword` | Password for the Impala user |
|
|
956
|
+
| `DATACONTRACT_IMPALA_USE_SSL` | `true` | Whether to use SSL; defaults to true if unset |
|
|
957
|
+
| `DATACONTRACT_IMPALA_AUTH_MECHANISM` | `LDAP` | Authentication mechanism; defaults to LDAP |
|
|
958
|
+
| `DATACONTRACT_IMPALA_USE_HTTP_TRANSPORT` | `true` | Whether to use the HTTP transport; defaults to true |
|
|
959
|
+
| `DATACONTRACT_IMPALA_HTTP_PATH` | `cliservice` | HTTP path for the Impala service; defaults to cliservice |
|
|
960
|
+
|
|
961
|
+
### Type-mapping note (logicalType → Impala type)
|
|
962
|
+
|
|
963
|
+
If `physicalType` is not specified in the schema, we recommend the following mapping from `logicalType` to Impala column types:
|
|
964
|
+
|
|
965
|
+
|logicalType | Recommended Impala type |
|
|
966
|
+
|------------|-------------------------|
|
|
967
|
+
| `integer` | `INT` or `BIGINT` |
|
|
968
|
+
| `number` | `DOUBLE`/`decimal(..)` |
|
|
969
|
+
| `string` | `STRING` or `VARCHAR` |
|
|
970
|
+
| `boolean` | `BOOLEAN` |
|
|
971
|
+
| `date` | `DATE` |
|
|
972
|
+
| `datetime` | `TIMESTAMP` |
|
|
973
|
+
|
|
974
|
+
This keeps the Impala schema compatible with the expectations of the Soda checks generated by datacontract-cli.
|
|
975
|
+
|
|
927
976
|
#### API
|
|
928
977
|
|
|
929
978
|
Data Contract CLI can test APIs that return data in JSON format.
|
|
@@ -1470,38 +1519,25 @@ datacontract import --format sql --source my_ddl.sql --dialect postgres --output
|
|
|
1470
1519
|
|
|
1471
1520
|
Available import options:
|
|
1472
1521
|
|
|
1473
|
-
| Type | Description
|
|
1474
|
-
|
|
1475
|
-
| `avro` | Import from AVRO schemas
|
|
1476
|
-
| `bigquery` | Import from BigQuery Schemas
|
|
1477
|
-
| `csv` | Import from CSV File
|
|
1478
|
-
| `dbml` | Import from DBML models
|
|
1479
|
-
| `dbt` | Import from dbt models
|
|
1480
|
-
| `excel` | Import from ODCS Excel Template
|
|
1481
|
-
| `glue` | Import from AWS Glue DataCatalog
|
|
1482
|
-
| `iceberg` | Import from an Iceberg JSON Schema Definition
|
|
1483
|
-
| `jsonschema` | Import from JSON Schemas
|
|
1484
|
-
| `
|
|
1485
|
-
| `
|
|
1486
|
-
| `
|
|
1487
|
-
| `
|
|
1488
|
-
| `
|
|
1489
|
-
| `
|
|
1490
|
-
|
|
|
1491
|
-
| Missing something? | Please create an issue on GitHub | TBD |
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
#### ODCS
|
|
1495
|
-
|
|
1496
|
-
Import from Open Data Contract Standard (ODCS) v2 or v3.
|
|
1497
|
-
The importer automatically detects the ODCS version and imports the data contract.
|
|
1498
|
-
|
|
1499
|
-
Examples:
|
|
1522
|
+
| Type | Description | Status |
|
|
1523
|
+
|--------------------|-----------------------------------------------|---------|
|
|
1524
|
+
| `avro` | Import from AVRO schemas | ✅ |
|
|
1525
|
+
| `bigquery` | Import from BigQuery Schemas | ✅ |
|
|
1526
|
+
| `csv` | Import from CSV File | ✅ |
|
|
1527
|
+
| `dbml` | Import from DBML models | ✅ |
|
|
1528
|
+
| `dbt` | Import from dbt models | ✅ |
|
|
1529
|
+
| `excel` | Import from ODCS Excel Template | ✅ |
|
|
1530
|
+
| `glue` | Import from AWS Glue DataCatalog | ✅ |
|
|
1531
|
+
| `iceberg` | Import from an Iceberg JSON Schema Definition | partial |
|
|
1532
|
+
| `jsonschema` | Import from JSON Schemas | ✅ |
|
|
1533
|
+
| `parquet` | Import from Parquet File Metadata | ✅ |
|
|
1534
|
+
| `protobuf` | Import from Protobuf schemas | ✅ |
|
|
1535
|
+
| `spark` | Import from Spark StructTypes, Variant | ✅ |
|
|
1536
|
+
| `sql` | Import from SQL DDL | ✅ |
|
|
1537
|
+
| `unity` | Import from Databricks Unity Catalog | partial |
|
|
1538
|
+
| `excel` | Import from ODCS Excel Template | ✅ |
|
|
1539
|
+
| Missing something? | Please create an issue on GitHub | TBD |
|
|
1500
1540
|
|
|
1501
|
-
```bash
|
|
1502
|
-
# Example import from ODCS
|
|
1503
|
-
datacontract import --format odcs --source my_data_contract.odcs.yaml
|
|
1504
|
-
```
|
|
1505
1541
|
|
|
1506
1542
|
#### BigQuery
|
|
1507
1543
|
|
|
@@ -2103,8 +2139,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
|
|
|
2103
2139
|
|
|
2104
2140
|
## Related Tools
|
|
2105
2141
|
|
|
2106
|
-
- [Data
|
|
2107
|
-
- [Data Contract GPT](https://gpt.datacontract.com) is a custom GPT that can help you write data contracts.
|
|
2142
|
+
- [Entropy Data](https://www.entropy-data.com/) is a commercial tool to manage data contracts. It contains a web UI, access management, and data governance for a data product marketplace based on data contracts.
|
|
2108
2143
|
- [Data Contract Editor](https://editor.datacontract.com) is an editor for Data Contracts, including a live html preview.
|
|
2109
2144
|
- [Data Contract Playground](https://data-catering.github.io/data-contract-playground/) allows you to validate and export your data contract to different formats within your browser.
|
|
2110
2145
|
|
{datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/check_soda_execute.py
RENAMED
|
@@ -14,6 +14,7 @@ from open_data_contract_standard.model import OpenDataContractStandard, Server
|
|
|
14
14
|
from datacontract.engines.soda.connections.bigquery import to_bigquery_soda_configuration
|
|
15
15
|
from datacontract.engines.soda.connections.databricks import to_databricks_soda_configuration
|
|
16
16
|
from datacontract.engines.soda.connections.duckdb_connection import get_duckdb_connection
|
|
17
|
+
from datacontract.engines.soda.connections.impala import to_impala_soda_configuration
|
|
17
18
|
from datacontract.engines.soda.connections.kafka import create_spark_session, read_kafka_topic
|
|
18
19
|
from datacontract.engines.soda.connections.postgres import to_postgres_soda_configuration
|
|
19
20
|
from datacontract.engines.soda.connections.snowflake import to_snowflake_soda_configuration
|
|
@@ -95,6 +96,18 @@ def check_soda_execute(
|
|
|
95
96
|
logging.info("Use Spark to connect to data source")
|
|
96
97
|
scan.add_spark_session(spark, data_source_name="datacontract-cli")
|
|
97
98
|
scan.set_data_source_name("datacontract-cli")
|
|
99
|
+
|
|
100
|
+
# ------------------------------------------------------------------
|
|
101
|
+
# NEW: native Impala server type
|
|
102
|
+
# ------------------------------------------------------------------
|
|
103
|
+
elif server.type == "impala":
|
|
104
|
+
run.log_info("Connecting to Impala via Soda engine")
|
|
105
|
+
soda_configuration_str = to_impala_soda_configuration(server)
|
|
106
|
+
scan.add_configuration_yaml_str(soda_configuration_str)
|
|
107
|
+
# data source name must match what we configure in to_impala_soda_configuration
|
|
108
|
+
scan.set_data_source_name("impala")
|
|
109
|
+
|
|
110
|
+
|
|
98
111
|
elif server.type == "kafka":
|
|
99
112
|
if spark is None:
|
|
100
113
|
spark = create_spark_session()
|
|
@@ -218,4 +231,4 @@ def update_reason(check, c):
|
|
|
218
231
|
# print(check.reason)
|
|
219
232
|
break # Exit the loop once the desired block is found
|
|
220
233
|
if "fail" in c["diagnostics"]:
|
|
221
|
-
check.reason = f"Value: {c['diagnostics']['value']} Fail: {c['diagnostics']['fail']}"
|
|
234
|
+
check.reason = f"Value: {c['diagnostics']['value']} Fail: {c['diagnostics']['fail']}"
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
import yaml
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def _get_bool_env(name: str, default: bool) -> bool:
|
|
7
|
+
"""
|
|
8
|
+
Helper to read a boolean from an environment variable.
|
|
9
|
+
|
|
10
|
+
Accepts: 1/0, true/false, yes/no, on/off (case-insensitive).
|
|
11
|
+
"""
|
|
12
|
+
value = os.getenv(name)
|
|
13
|
+
if value is None:
|
|
14
|
+
return default
|
|
15
|
+
return value.strip().lower() in ("1", "true", "yes", "y", "on")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def to_impala_soda_configuration(server):
|
|
19
|
+
"""
|
|
20
|
+
Build a Soda configuration for an Impala data source.
|
|
21
|
+
|
|
22
|
+
Expects the datacontract `server` block to have at least:
|
|
23
|
+
- type (e.g. "impala")
|
|
24
|
+
- host
|
|
25
|
+
- port (optional; defaults to 443 if not set)
|
|
26
|
+
|
|
27
|
+
Credentials are taken from environment variables:
|
|
28
|
+
- DATACONTRACT_IMPALA_USERNAME
|
|
29
|
+
- DATACONTRACT_IMPALA_PASSWORD
|
|
30
|
+
|
|
31
|
+
Connection behaviour can be overridden via:
|
|
32
|
+
- DATACONTRACT_IMPALA_USE_SSL (default: true)
|
|
33
|
+
- DATACONTRACT_IMPALA_AUTH_MECHANISM (default: "LDAP")
|
|
34
|
+
- DATACONTRACT_IMPALA_USE_HTTP_TRANSPORT (default: true)
|
|
35
|
+
- DATACONTRACT_IMPALA_HTTP_PATH (default: "cliservice")
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
port = getattr(server, "port", None)
|
|
39
|
+
if port is None:
|
|
40
|
+
port = 443
|
|
41
|
+
|
|
42
|
+
# Optional database / schema default, e.g. "edpdevs_scratch"
|
|
43
|
+
database = getattr(server, "database", None)
|
|
44
|
+
|
|
45
|
+
use_ssl = _get_bool_env("DATACONTRACT_IMPALA_USE_SSL", True)
|
|
46
|
+
auth_mechanism = os.getenv("DATACONTRACT_IMPALA_AUTH_MECHANISM", "LDAP")
|
|
47
|
+
use_http_transport = _get_bool_env(
|
|
48
|
+
"DATACONTRACT_IMPALA_USE_HTTP_TRANSPORT", True
|
|
49
|
+
)
|
|
50
|
+
http_path = os.getenv("DATACONTRACT_IMPALA_HTTP_PATH", "cliservice")
|
|
51
|
+
|
|
52
|
+
connection = {
|
|
53
|
+
"host": server.host,
|
|
54
|
+
"port": str(port),
|
|
55
|
+
"username": os.getenv("DATACONTRACT_IMPALA_USERNAME"),
|
|
56
|
+
"password": os.getenv("DATACONTRACT_IMPALA_PASSWORD"),
|
|
57
|
+
"use_ssl": use_ssl,
|
|
58
|
+
"auth_mechanism": auth_mechanism,
|
|
59
|
+
"use_http_transport": use_http_transport,
|
|
60
|
+
"http_path": http_path,
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if database:
|
|
64
|
+
connection["database"] = database
|
|
65
|
+
|
|
66
|
+
soda_configuration = {
|
|
67
|
+
f"data_source {server.type}": {
|
|
68
|
+
"type": "impala",
|
|
69
|
+
"connection": connection,
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
soda_configuration_str = yaml.dump(soda_configuration)
|
|
74
|
+
return soda_configuration_str
|
{datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/sql_type_converter.py
RENAMED
|
@@ -518,6 +518,64 @@ def convert_type_to_trino(field: Union[SchemaProperty, FieldLike]) -> None | str
|
|
|
518
518
|
return None
|
|
519
519
|
|
|
520
520
|
|
|
521
|
+
def convert_type_to_impala(field: Union[SchemaProperty, FieldLike]) -> None | str:
|
|
522
|
+
"""Convert from supported data contract types to equivalent Impala types.
|
|
523
|
+
|
|
524
|
+
Used as a fallback when `physicalType` is not present.
|
|
525
|
+
"""
|
|
526
|
+
# Allow an explicit override via config/customProperties
|
|
527
|
+
impala_type = _get_config_value(field, "impalaType")
|
|
528
|
+
if impala_type:
|
|
529
|
+
return impala_type
|
|
530
|
+
|
|
531
|
+
field_type = _get_type(field)
|
|
532
|
+
if not field_type:
|
|
533
|
+
return None
|
|
534
|
+
|
|
535
|
+
t = field_type.lower()
|
|
536
|
+
|
|
537
|
+
# String-like
|
|
538
|
+
if t in ["string", "varchar", "text"]:
|
|
539
|
+
return "STRING"
|
|
540
|
+
|
|
541
|
+
# Numeric / decimal
|
|
542
|
+
if t in ["number", "decimal", "numeric"]:
|
|
543
|
+
precision = _get_precision(field) or 38
|
|
544
|
+
scale = _get_scale(field) or 0
|
|
545
|
+
return f"DECIMAL({precision},{scale})"
|
|
546
|
+
|
|
547
|
+
if t == "float":
|
|
548
|
+
return "FLOAT"
|
|
549
|
+
if t == "double":
|
|
550
|
+
return "DOUBLE"
|
|
551
|
+
|
|
552
|
+
# Integers
|
|
553
|
+
if t in ["integer", "int"]:
|
|
554
|
+
return "INT"
|
|
555
|
+
if t in ["long", "bigint"]:
|
|
556
|
+
return "BIGINT"
|
|
557
|
+
|
|
558
|
+
# Boolean
|
|
559
|
+
if t == "boolean":
|
|
560
|
+
return "BOOLEAN"
|
|
561
|
+
|
|
562
|
+
# Temporal – Impala has a single TIMESTAMP type
|
|
563
|
+
if t in ["timestamp", "timestamp_ntz", "timestamp_tz"]:
|
|
564
|
+
return "TIMESTAMP"
|
|
565
|
+
if t == "date":
|
|
566
|
+
return "DATE"
|
|
567
|
+
# No dedicated TIME type in Impala → store as string
|
|
568
|
+
if t == "time":
|
|
569
|
+
return "STRING"
|
|
570
|
+
|
|
571
|
+
# Binary
|
|
572
|
+
if t in ["bytes", "binary"]:
|
|
573
|
+
return "BINARY"
|
|
574
|
+
|
|
575
|
+
# For complex / JSON-like types we currently do not emit a type check
|
|
576
|
+
# (returning None means no "has type" check is generated)
|
|
577
|
+
return None
|
|
578
|
+
|
|
521
579
|
def convert_type_to_oracle(schema_property: SchemaProperty) -> None | str:
|
|
522
580
|
"""Convert ODCS logical types to Oracle types.
|
|
523
581
|
|
|
@@ -547,4 +605,4 @@ def convert_type_to_oracle(schema_property: SchemaProperty) -> None | str:
|
|
|
547
605
|
"array": "CLOB",
|
|
548
606
|
}
|
|
549
607
|
|
|
550
|
-
return mapping.get(logical_type)
|
|
608
|
+
return mapping.get(logical_type)
|