指南:用 YAML 聲明式斷言編譯為 Snowflake Data Metric Functions)
DataHub Snowflake DMF Assertions 實戰(zhàn)指南用 YAML 聲明式斷言編譯為 Snowflake Data Metric Functions【免費下載鏈接】datahubThe Context Platform for your Data and AI Stack項目地址: https://gitcode.com/GitHub_Trending/da/datahub本指南圍繞 DataHub 的 Open Assertion Compiler 展開講解如何用簡單的 YAML 文件聲明數(shù)據(jù)質(zhì)量斷言并將其編譯為可在 Snowflake 上原生執(zhí)行的 Data Metric FunctionsDMF再通過 Snowflake 攝取把執(zhí)行結(jié)果回傳到 DataHub在數(shù)據(jù)集上下文中以歷史時間線的形式呈現(xiàn)。讀完本文你將掌握從 YAML 定義、CLI 注冊、DMF 編譯、Snowflake 側(cè)注冊執(zhí)行到攝取斷言結(jié)果的完整閉環(huán)流程并理解外部用戶自建DMF 的接入方式與約束邊界。該功能當(dāng)前處于BETA狀態(tài)。一、整體思路從 YAML 到 Snowflake DMFDataHub 的 Open Assertion Compiler 允許你以簡單的 YAML 格式聲明數(shù)據(jù)質(zhì)量斷言將斷言編譯成 Snowflake Data Metric FunctionsDMF在 Snowflake 環(huán)境中注冊編譯產(chǎn)物在常規(guī) DataHub 攝取流程中把 DMF 執(zhí)行結(jié)果拉回 DataHub作為普通 Assertion Results 展示在關(guān)聯(lián)表的歷史時間線上。編譯與執(zhí)行是分離的compile命令只負(fù)責(zé)把 YAML 斷言翻譯成 SQL 工件不連接 Snowflake、不執(zhí)行任何查詢注冊與調(diào)度由 Snowflake 側(cè)完成結(jié)果回傳則發(fā)生在 DataHub 的 Snowflake ingestion 過程中。從源碼看Snowflake 編譯器的實現(xiàn)位于 compiler.py其內(nèi)部由三部分組成SnowflakeMetricSQLGenerator生成指標(biāo) SQL、SnowflakeMetricEvalOperatorSQLGenerator生成評估條件 SQL、SnowflakeDMFHandler拼裝CREATE DATA METRIC FUNCTION與ALTER TABLE ... ADD DATA METRIC FUNCTION語句。二、前置條件開始之前請確認(rèn)以下條件全部滿足擁有Snowflake Enterprise 賬戶且已啟用 DMF 功能具備在 Snowflake 環(huán)境中預(yù)置provisionDMF的權(quán)限見下文權(quán)限章節(jié)具備在 Snowflake 環(huán)境中查詢 DMF 結(jié)果的權(quán)限見下文權(quán)限章節(jié)已有一個完成 Snowflake 元數(shù)據(jù)攝取、可用的 DataHub 實例。如果尚未配置 Snowflake 攝取參考 Snowflake Quickstart Guide 上手已安裝 DataHub CLI 并運行過datahub init。三、權(quán)限準(zhǔn)備在 Snowflake 側(cè)正確配置權(quán)限是整套流程成功的前提。以下是三組不同角色所需的最小權(quán)限集合。3.1 注冊 DMF 所需的權(quán)限執(zhí)行 DMF 注冊與取攝取的服務(wù)賬戶service account必須具備PrivilegeObjectNotesUSAGEDatabase, schemaDMF 將被創(chuàng)建在該數(shù)據(jù)庫與 Schema 中由 compile 命令中的DMF_SCHEMA配置指定。CREATE FUNCTIONSchema允許在 compile 命令配置的 Schema 中創(chuàng)建新的 DMF。EXECUTE DATA METRIC FUNCTIONAccount控制哪些角色可以使用與服務(wù)器無關(guān)server-agnostic的計算資源來調(diào)用系統(tǒng) DMF。USAGEDatabase, schema查詢中引用的目標(biāo)表所在的數(shù)據(jù)庫與 Schema。OWNERSHIPTable允許將 DMF 與目標(biāo)表關(guān)聯(lián)。USAGEDMF允許調(diào)用 compile 命令配置的 Schema 中的 DMF。同時必須授予的角色RoleNotesSNOWFLAKE.DATA_METRIC_USER使用 System DMFs 所需3.2 運行 DMF調(diào)度執(zhí)行所需的權(quán)限由于定時調(diào)度的 DMF 以表屬主table owner的角色運行表屬主必須具備PrivilegeObjectNotesUSAGEDatabase, schemaDMF 將被創(chuàng)建在該數(shù)據(jù)庫與 Schema 中由 compile 命令中的DMF_SCHEMA配置指定。USAGEDMF允許調(diào)用 compile 命令配置的 Schema 中的 DMF。EXECUTE DATA METRIC FUNCTIONAccount控制哪些角色可以使用與服務(wù)器無關(guān)的計算資源來調(diào)用系統(tǒng) DMF。同時必須授予的角色RoleNotesSNOWFLAKE.DATA_METRIC_USER使用 System DMFs 所需3.3 查詢 DMF 結(jié)果所需的權(quán)限此外執(zhí)行 DataHub Ingestion 并查詢 DMF 結(jié)果的服務(wù)賬戶還必須被授予以下系統(tǒng)應(yīng)用角色RoleNotesDATA_QUALITY_MONITORING_VIEWER查詢 DMF 結(jié)果表所需有關(guān) Snowflake DMF 及其預(yù)置、查詢所需權(quán)限的更多細(xì)節(jié)參見 Snowflake 官方數(shù)據(jù)質(zhì)量文檔。3.4 授權(quán)示例 SQL以下 SQL 給出了一個可直接套用的授權(quán)腳本覆蓋上述三類角色assertion-service-role、table-owner-role、datahub_role-- 為 assertion-service-role 配置創(chuàng)建 DMF 并與表關(guān)聯(lián)的權(quán)限 grant usage on database dmf-database to role assertion-service-role grant usage on schema dmf-database.dmf-schema to role assertion-service-role grant create function on schema dmf-database.dmf-schema to role assertion-service-role -- 授予 assertion-service-role 所有權(quán)及其余權(quán)限 grant role table-owner-role to role assertion-service-role -- 為 table-owner-role 配置按計劃運行 DMF 的權(quán)限 grant usage on database dmf-database to role table-owner-role grant usage on schema dmf-database.dmf-schema to role table-owner-role grant usage on all functions in dmf-database.dmf-schema to role table-owner-role grant usage on future functions in dmf-database.dmf-schema to role table-owner-role grant database role SNOWFLAKE.DATA_METRIC_USER to role table-owner-role grant execute data metric function on account to role table-owner-role -- 為 datahub-role 配置查詢 DMF 結(jié)果的權(quán)限 grant application role SNOWFLAKE.DATA_QUALITY_MONITORING_VIEWER to role datahub_role注意其中使用了USAGE ON FUTURE FUNCTIONS確保后續(xù)新建的 DMF 也自動對表屬主可見。四、支持的斷言類型DataHub Snowflake DMF Assertion Compiler 當(dāng)前支持以下斷言類型Freshness校驗表是否在指定時間窗口內(nèi)被更新Volume校驗表行數(shù)等體量指標(biāo)是否滿足閾值Column校驗列上的指標(biāo)如空值數(shù)或列值約束Custom SQL自定義 SQL 返回的指標(biāo)是否滿足條件。注意Schema Assertions 目前不受支持。從源碼看編譯器對斷言類型的支持體現(xiàn)在 metric_sql_generator.py 的singledispatchmethod分發(fā)中RowCountChangeVolumeAssertion與SqlMetricChangeAssertion增量/變更型斷言會被顯式判定為Unsupported assertion type并拋錯這與文檔中變更類斷言不被支持的限制一致。五、完整的五步實戰(zhàn)流程整個流程分為五步定義 YAML 斷言 → 注冊到 DataHub → 編譯為 Snowflake DMF → 在 Snowflake 注冊執(zhí)行 → 攝取結(jié)果回傳。Step 1用 Assertion YAML 文件定義數(shù)據(jù)質(zhì)量斷言斷言以 YAML 聲明倉庫提供了一個完整的可運行示例 assertions_configuration.yml包含五種典型斷言version: 1 namespace: test-config-id-1 assertions: # Freshness Assertion - entity: urn:li:dataset:(urn:li:dataPlatform:snowflake,test_db.public.test_assertions_all_times,PROD) type: freshness lookback_interval: 1 hour last_modified_field: col_timestamp schedule: type: cron cron: 0 * * * * meta: entity_qualified_name: TEST_DB.PUBLIC.TEST_ASSERTIONS_ALL_TIMES entity_schema: - col: col_date native_type: DATE # Volume Assertion - type: volume entity: urn:li:dataset:(urn:li:dataPlatform:snowflake,test_db.public.test_assertions_all_times,PROD) metric: row_count condition: type: less_than_or_equal_to value: 1000 schedule: type: cron cron: 0 * * * * meta: entity_qualified_name: TEST_DB.PUBLIC.TEST_ASSERTIONS_ALL_TIMES entity_schema: - col: col_date native_type: DATE # Field Metric Assertion - type: field entity: urn:li:dataset:(urn:li:dataPlatform:snowflake,test_db.public.test_assertions_all_times,PROD) field: col_date metric: null_count condition: type: equal_to value: 0 schedule: type: cron cron: 0 * * * * meta: entity_qualified_name: TEST_DB.PUBLIC.TEST_ASSERTIONS_ALL_TIMES entity_schema: - col: col_date native_type: DATE # Field Value Assertion - type: field entity: urn:li:dataset:(urn:li:dataPlatform:snowflake,test_db.public.purchase_event,PROD) field: quantity condition: type: between min: 0 max: 10 schedule: type: on_table_change meta: entity_qualified_name: TEST_DB.PUBLIC.PURCHASE_EVENT entity_schema: - col: quantity native_type: FLOAT # Custom SQL Metric Assertion - type: sql entity: urn:li:dataset:(urn:li:dataPlatform:snowflake,test_db.public.purchase_event,PROD) statement: select mode(quantity) from test_db.public.purchase_event condition: type: equal_to value: 5 schedule: type: on_table_change meta: entity_qualified_name: TEST_DB.PUBLIC.PURCHASE_EVENT entity_schema: - col: quantity native_type: FLOAT關(guān)鍵字段說明version配置文件格式版本固定為1namespace內(nèi)部別名id標(biāo)識該斷言配置文件的唯一命名空間。此結(jié)構(gòu)由 assertion_config_spec.py 中的AssertionsConfigSpec模型校驗entity斷言作用目標(biāo)數(shù)據(jù)集的 URN必須與 DataHub 中已攝取的 Snowflake 數(shù)據(jù)集一致type斷言類型取值為freshness/volume/field/sqlschedule調(diào)度方式支持croncron 表達(dá)式 時區(qū)與on_table_change表變更觸發(fā)meta.entity_qualified_nameSnowflake 側(cè)的完整表名DB.SCHEMA.TABLE用于生成 DMF 關(guān)聯(lián)語句meta.entity_schemaDMF 參數(shù)所需的一個列名與原生類型。Snowflake 不允許創(chuàng)建不帶列參數(shù)的自定義數(shù)據(jù)指標(biāo)函數(shù)因此編譯器需要從表 schema 中取任意一列作為ARGT TABLE(...)的參數(shù)見 compiler.py 中g(shù)et_dmf_args的實現(xiàn)。Step 2用 DataHub CLI 注冊斷言將斷言注冊到 DataHub使其在 DataHub UI 中可見datahub assertions upsert -f examples/library/assertions_configuration.ymlupsert命令讀取 YAML 文件為每條斷言生成一個urn:li:assertion:id并發(fā)射對應(yīng)的AssertionInfoMCP 到 DataHub。其 CLI 實現(xiàn)在 assertions_cli.py。注倉庫中該 assertions CLI 已標(biāo)記為 deprecated未來版本可能移除并建議關(guān)注替代方案編譯與注冊流程在當(dāng)前版本仍然可用。Step 3用assertions compile編譯為 Snowflake DMF接下來使用compile命令生成可在 Snowflake 注冊的 SQL 代碼datahub assertions compile -f examples/library/assertions_configuration.yml -p snowflake -x DMF_SCHEMAdb.schema-where-DMF-should-live命令參數(shù)參數(shù)說明-f, --file斷言 YAML 文件路徑必填-p, --platform編譯目標(biāo)平臺Snowflake 為snowflake必填-o, --output-to編譯產(chǎn)物輸出目錄可選默認(rèn)當(dāng)前工作目錄下的target/-x, --extras平臺相關(guān)的額外鍵值對格式keyvalue可多次傳入。Snowflake 平臺必須提供DMF_SCHEMAdb.schemaDMF_SCHEMA是必需的擴展參數(shù)編譯器會嚴(yán)格校驗其存在否則報錯Must specify value for DMF schema using -x DMF_SCHEMAdb.schema見 compiler.py 的create方法。命令運行后會生成兩個文件默認(rèn)位于target/目錄可用-o指定其他目錄dmf_definitions.sql將注冊到 Snowflake 的 DMF 創(chuàng)建 SQLdmf_associations.sql將 DMF 與目標(biāo)表關(guān)聯(lián)、并配置調(diào)度計劃的 SQL。此外還會生成compile_report.json編譯報告記錄每條斷言的編譯成功/失敗狀態(tài)見 assertions_cli.py。dmf_definitions.sql內(nèi)容示例該文件保存從 YAML 斷言定義編譯生成的 DMF 創(chuàng)建語句-- Example dmf_definitions.sql -- Start of Assertion 5c32eef47bd763fece7d21c7cbf6c659 CREATE or REPLACE DATA METRIC FUNCTION test_db.datahub_dmfs.datahub__5c32eef47bd763fece7d21c7cbf6c659 (ARGT TABLE(col_date DATE)) RETURNS NUMBER COMMENT Created via DataHub for assertion urn:li:assertion:5c32eef47bd763fece7d21c7cbf6c659 of type volume AS $$ select case when metric 1000 then 1 else 0 end from (select count(*) as metric from TEST_DB.PUBLIC.TEST_ASSERTIONS_ALL_TIMES ) $$; -- End of Assertion 5c32eef47bd763fece7d21c7cbf6c659 ....要點解讀DMF 名稱統(tǒng)一使用datahub__assertion_id前綴源碼見 compiler.py 的get_dmf_name這個前綴在攝取階段用于區(qū)分 DataHub 管理的 DMF 與外部 DMFCOMMENT中記錄了斷言 URN 與斷言類型便于溯源函數(shù)體是一個返回 0/1 的 CASE 表達(dá)式metric 1000返回 1通過否則返回 0失敗。所有類型斷言的最終評估都會被統(tǒng)一折疊為 0/1 語義組裝上述語句的模板見 dmf_generator.py 的create_dmf。dmf_associations.sql內(nèi)容示例該文件保存將 DMF 與目標(biāo)表關(guān)聯(lián)、并配置調(diào)度計劃的語句-- Example dmf_associations.sql -- Start of Assertion 5c32eef47bd763fece7d21c7cbf6c659 ALTER TABLE TEST_DB.PUBLIC.TEST_ASSERTIONS_ALL_TIMES SET DATA_METRIC_SCHEDULE TRIGGER_ON_CHANGES; ALTER TABLE TEST_DB.PUBLIC.TEST_ASSERTIONS_ALL_TIMES ADD DATA METRIC FUNCTION test_db.datahub_dmfs.datahub__5c32eef47bd763fece7d21c7cbf6c659 ON (col_date); -- End of Assertion 5c32eef47bd763fece7d21c7cbf6c659 ....調(diào)度方式由斷言 YAML 中的schedule決定編譯器會將其翻譯為 Snowflake 的調(diào)度語法見 compiler.py 的get_dmf_scheduleYAML schedule生成的 DATA_METRIC_SCHEDULEtype: on_table_changeTRIGGER_ON_CHANGEStype: cron如cron: 0 * * * *時區(qū)UTCUSING CRON 0 * * * * UTCtype: interval如 60 分鐘60 MIN同時編譯器會校驗同一張表上的所有斷言必須使用完全相同的調(diào)度否則拋錯見 compiler.py這與下文注意事項中 Snowflake 的限制保持一致。Step 4在 Snowflake 環(huán)境中注冊編譯產(chǎn)物將 Step 3 生成的兩個 SQL 文件在 Snowflake 中執(zhí)行??梢灾苯釉?Snowflake UI 中運行也可以使用 SnowSQL CLIsnowsql -f dmf_definitions.sql snowsql -f dmf_associations.sql:::note 在表上調(diào)度 Data Metric Function 會產(chǎn)生 SnowflakeServerless Credit 用量計費細(xì)節(jié)參考 Snowflake 官方計費說明。若某條斷言不再使用請務(wù)必通過dmf_associations.sql中對應(yīng)的方式 DROP 掉相關(guān) Data Metric Function避免持續(xù)產(chǎn)生費用。 :::Step 5運行攝取把 DMF 結(jié)果回傳到 DataHubDMF 注冊完成后Snowflake 會在目標(biāo)表更新時TRIGGER_ON_CHANGES或按固定計劃自動執(zhí)行它們。要把生成的數(shù)據(jù)質(zhì)量斷言結(jié)果回傳到 DataHub需要以特殊配置標(biāo)志運行 DataHub 攝取include_assertion_results: true# Your DataHub Snowflake Recipe source: type: snowflake config: # ... include_assertion_results: True # ...然后照常執(zhí)行攝取datahub ingest -c snowflake.yml攝取過程中DataHub 會查詢 Snowflake 中存儲的最新 DMF 結(jié)果將其轉(zhuǎn)換為 DataHub Assertion Results并在攝取期間通過 CLI 或 UI以普通斷言的形式報告回來。從源碼看攝取器在 snowflake_assertion.py 中查詢 snowflake_query.py 定義的dmf_assertion_resultsSQL從SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS視圖讀取結(jié)果并按MEASUREMENT_TIME時間窗口對應(yīng) recipe 中的start_time/end_time過濾默認(rèn)情況下include_externally_managed_dmfsFalse查詢會通過METRIC_NAME ilike datahub\_\_% escape \過濾只取 DataHub 創(chuàng)建的 DMF結(jié)果行中VALUE被映射為斷言運行狀態(tài)VALUE1→ SUCCESS通過VALUE0→ FAILURE失敗其他值 → ERROR見 snowflake_assertion.py每條結(jié)果生成一個AssertionRunEvent工作單元并攜帶MEASUREMENT_TIME作為時間戳DataHub UI 據(jù)此繪制歷史時間線。單元測試 test_snowflake_assertion.py 驗證了上述查詢行為默認(rèn)查詢包含datahub前綴過濾開啟外部 DMF 后則不附加任何ilike過濾。六、攝取外部用戶自建DMF除了 DataHub 創(chuàng)建的 DMF你還可以攝取自己用 Snowflake 原生方式創(chuàng)建的 Data Metric Function 的結(jié)果。外部指那些未經(jīng)過 DataHub assertion compiler、直接創(chuàng)建在 Snowflake 中的 DMF——它們獨立于 DataHub 的管理范圍之外。6.1 為什么要攝取外部 DMF存量 DMF在采用 DataHub 之前就已經(jīng)存在于 Snowflake 的 DMF希望在 DataHub 中看到其結(jié)果而無需重建自定義邏輯需要 DataHub assertion compiler 不支持的 DMF 邏輯例如復(fù)雜的多表檢查團隊工作流不同團隊直接在 Snowflake 中管理 DMF但你希望在 DataHub 中獲得集中可見性漸進式采用在完全遷移到 DataHub 管理的斷言之前先在 DataHub 中監(jiān)控現(xiàn)有的數(shù)據(jù)質(zhì)量檢查。6.2 啟用外部 DMF 攝取在 Snowflake recipe 中添加include_externally_managed_dmfs標(biāo)志source: type: snowflake config: # ... connection config ... # 啟用斷言結(jié)果攝取必需 include_assertion_results: true # 啟用外部 DMF 攝取新增 include_externally_managed_dmfs: true # 斷言結(jié)果的時間窗口 start_time: -7 days兩個標(biāo)志必須同時開啟外部 DMF 攝取才能生效。這一約束在配置模型層被強制校驗include_externally_managed_dmfs: True而include_assertion_results未開啟時配置校驗會直接拋出ValueError見 snowflake_config.py。6.3 外部 DMF 的要求外部 DMF 必須以1表示 SUCCESS、以0表示 FAILURE。DataHub 將 SnowflakeDATA_QUALITY_MONITORING_RESULTS表中的VALUE列解釋為VALUE 1→ 斷言PASSEDVALUE 0→ 斷言FAILED這是因為 DataHub 無法解釋任意的返回值例如 100 個空值行——這到底是好還是壞。你必須把通過/失敗邏輯構(gòu)建到 DMF 本身中。:::warning 如果我的 DMF 返回其他值怎么辦 如果 DMF 返回 0 或 1 以外的值DataHub 會把斷言結(jié)果標(biāo)記為ERRORVALUE 1→PASSEDVALUE 0→FAILEDVALUE ! 0 且 VALUE ! 1如 5、100、-1→ERRORERROR 狀態(tài)表示該 DMF 未按 DataHub 攝取的要求正確配置??赏ㄟ^以下方式識別這些情況檢查攝取日志中的警告例如DMF my_dmf returned invalid value 100. Expected 1 (pass) or 0 (fail). Marking as ERROR.在 DataHub UI 中查找處于 ERROR 狀態(tài)的斷言 :::這一映射邏輯在 snowflake_assertion.py 中有直接實現(xiàn)日志中的警告文案與文檔描述一致。示例正確編寫外部 DMF錯誤示例—— 返回原始計數(shù)DataHub 無法解釋CREATE DATA METRIC FUNCTION my_null_check(ARGT TABLE(col VARCHAR)) RETURNS NUMBER AS $$ SELECT COUNT(*) FROM ARGT WHERE col IS NULL $$; -- 返回0, 5, 100 等 —— DataHub 無法判定通過/失敗正確示例—— 返回 1通過或 0失敗CREATE DATA METRIC FUNCTION my_null_check(ARGT TABLE(col VARCHAR)) RETURNS NUMBER AS $$ SELECT CASE WHEN COUNT(*) 0 THEN 1 ELSE 0 END FROM ARGT WHERE col IS NULL $$; -- 返回?zé)o空值時返回 1通過存在空值時返回 0失敗正確示例—— 帶閾值CREATE DATA METRIC FUNCTION my_null_check_threshold(ARGT TABLE(col VARCHAR)) RETURNS NUMBER AS $$ SELECT CASE WHEN COUNT(*) 10 THEN 1 ELSE 0 END FROM ARGT WHERE col IS NULL $$; -- 返回空值 ≤10 時返回 1通過空值 10 時返回 0失敗6.4 外部 DMF 與 DataHub 創(chuàng)建 DMF 的差異AspectDataHub-Created DMFsExternal DMFsNaming以datahub__為前綴任意名稱Definition通過datahub assertions compile創(chuàng)建在 Snowflake 中手動創(chuàng)建Assertion Type基于 YAML 定義Freshness、Volume 等CUSTOMSourceNATIVE在 DataHub 中定義EXTERNALURN Generation從 DMF 名稱提取datahub__guid由 Snowflake 的REFERENCE_ID生成從源碼看外部 DMF 的 URN 通過SnowflakeExternalDmfKey基于REFERENCE_IDDMF-表-列關(guān)聯(lián)的唯一標(biāo)識與可選platform_instance生成確定性 GUID見 snowflake_assertion.py 與 測試用例從而保證同一REFERENCE_ID多次攝取生成相同的斷言 URN、不同REFERENCE_ID互不沖突。而對于datahub__前綴的 DMF則直接從名稱中提取 GUID。6.5 外部 DMF 在 DataHub UI 中的呈現(xiàn)外部 DMF 在 DataHub 中以如下形式出現(xiàn)Assertion TypeCUSTOMSourceEXTERNALPlatform InstanceSnowflake platform instance若已配置DescriptionExternal Snowflake DMF: {dmf_name}Custom Propertiessnowflake_dmf_nameDMF 函數(shù)名snowflake_reference_idSnowflake 對 DMF-表綁定的唯一標(biāo)識snowflake_dmf_columnsDMF 作用的列列表逗號分隔這些字段在 snowflake_assertion.py 的_create_assertion_info_workunit中被寫入AssertionInfo的customAssertion與customProperties單列 DMF 還會生成對應(yīng)的 schema field URN從而把斷言掛到具體列上。你可以在 DataHub UI 中關(guān)聯(lián)數(shù)據(jù)集的Quality標(biāo)簽頁查看外部 DMF 斷言它們會與 DataHub 創(chuàng)建的斷言一同展示通過/失敗歷史。七、注意事項Caveats以下限制源自 Snowflake 平臺本身使用前需知曉目前 Snowflake 最多支持1000 個 DMF-表關(guān)聯(lián)因此你無法為 Snowflake 定義超過 1000 條斷言目前 Snowflake不允許在 DMF 定義中使用 JOIN 查詢或非確定性函數(shù)因此 SQL 斷言或過濾器部分不能使用這些特性目前一張表上調(diào)度的所有 DMF必須遵循完全相同的調(diào)度計劃因此不能為同一張表上的不同斷言設(shè)置不同的調(diào)度目前 DMF僅支持常規(guī)表不支持動態(tài)表dynamic tables或外部表external tables。其中同一表必須同調(diào)度的限制在編譯器側(cè)已被強制執(zhí)行見 compiler.py僅支持常規(guī)表也與 Snowflake 攝取配置中table_types的取值BASE TABLE/EXTERNAL TABLE相互印證見 snowflake_config.py。八、FAQ原文檔中該章節(jié)標(biāo)注為 Coming soon!暫未提供具體問答內(nèi)容。如果你在使用中遇到問題可以結(jié)合上文提到的源碼路徑編譯器、攝取器、查詢與測試定位行為細(xì)節(jié)或在 DataHub 官方渠道尋求支持。九、總結(jié)與后續(xù)探索本文完整走通了YAML 聲明斷言 →assertions upsert注冊 →assertions compile編譯 → Snowflake 注冊與調(diào)度 →include_assertion_results攝取結(jié)果的 Snowflake DMF 斷言全鏈路并說明了外部 DMF 的接入要求與 0/1 返回值約定。想深入了解的讀者可以繼續(xù)在倉庫中探索編譯產(chǎn)物生成與調(diào)度翻譯compiler.py、dmf_generator.py、metric_sql_generator.py斷言結(jié)果攝取與外部 DMF 處理snowflake_assertion.py、snowflake_query.py攝取配置項定義與校驗snowflake_config.py單元測試test_snowflake_assertion.pyYAML 斷言定義示例assertions_configuration.yml四種斷言類型的詳細(xì)概念Freshness、Volume、Column、Custom SQLSnowflake 攝取入門overview、setup、configuration?!久赓M下載鏈接】datahubThe Context Platform for your Data and AI Stack項目地址: https://gitcode.com/GitHub_Trending/da/datahub創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考