本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon 疑難排解 DataZone
如果您在使用 Amazon DataZone 時遇到存取拒絕問題或類似困難,請參閱本節中的主題。
對 Amazon 的 AWS Lake Formation 許可進行故障診斷 DataZone
本節包含您在 時可能遇到之問題的疑難排解指示設定 Amazon 的 Lake Formation 許可 DataZone。
Data Portal 中的錯誤訊息 | 解析度 |
---|---|
無法擔任資料存取角色。 |
當 Amazon DataZone 無法假設您用來DefaultDataLakeBlueprint在帳戶中啟用 的 AmazonDataZoneGlueDataAccessRole時,就會顯示此錯誤。若要修正此問題,請前往 AWS IAM資料資產存在之帳戶中的主控台,並確認 與 Amazon DataZone 服務主體AmazonDataZoneGlueDataAccessRole之間具有正確的信任關係。如需詳細資訊,請參閱 AmazonDataZoneGlueAccess-<region>-<domainId> |
資料存取角色沒有讀取您嘗試訂閱之資產中繼資料的必要許可。 |
當 Amazon DataZone 成功擔任AmazonDataZoneGlueDataAccessRole角色,但角色沒有必要的許可時,就會顯示此錯誤。若要修正此問題,請前往資料資產存在的帳戶中的 AWS IAM主控台,並確認角色已AmazonDataZoneGlueManageAccessRolePolicy連接 。如需詳細資訊,請參閱AmazonDataZoneGlueAccess-<region>-<domainId>。 |
資產是資源連結。Amazon DataZone 不支援資源連結的訂閱。 |
當您嘗試發佈至 Amazon 的資產 DataZone 是 AWS Glue 資料表的資源連結時,就會顯示此錯誤。 |
資產不是由 AWS Lake Formation 管理。 |
此錯誤表示 Lake AWS Formation 許可不會強制執行在您要發佈的資產上。這可能會發生在下列情況下。
|
資料存取角色沒有授予此資產存取權的必要 Lake Formation 許可。 |
此錯誤表示您用來DefaultDataLakeBlueprint在帳戶中啟用 AmazonDataZoneGlueDataAccessRole的 ,沒有 Amazon DataZone 管理已發佈資產許可的必要許可。您可以新增 AmazonDataZoneGlueDataAccessRole作為 AWS Lake Formation 管理員,或將下列許可授予您要發佈的資產AmazonDataZoneGlueDataAccessRole上的 ,以解決問題。
|
Amazon DataZone 譜系資產與上游資料集連結的故障診斷
本節包含您可能遇到的 Amazon DataZone 譜系問題的疑難排解指示。對於某些 AWS Glue 和 Amazon Redshift 相關的開放譜系執行事件,您可能會看到資產譜系未連結至上游資料集。本主題說明各種情況,以及一些緩解問題的方法。如需譜系的詳細資訊,請參閱 Amazon 中的資料譜系 DataZone (預覽) 。
SourceIdentifier 在譜系節點上
譜系節點中的sourceIdentifier
屬性代表資料集上發生的事件。如需詳細資訊,請參閱譜系節點 中的關鍵屬性。
譜系節點代表對應資料集或任務上發生的所有事件。譜系節點包含 "sourceIdentifier" 屬性,其中包含對應資料集/任務的識別符。在我們支援開放系列事件時,該sourceIdentifier
值預設為資料集、任務和任務執行的「命名空間」和「名稱」組合。
對於 AWS Glue 和 Amazon Redshift 等 AWS 資源, sourceIdentifier
會是 AWS Glue 資料表ARN和 Redshift 資料表,Amazon ARNs DataZone 將從中建構 Run-event 和其他詳細資訊,如下所示:
注意
在 中 AWS, ARN包含資訊accountId,例如每個資源的 、區域、資料庫和資料表。
OpenLineage 這些資料集的事件包含資料庫和資料表名稱。
區域是在執行的「環境屬性」構面中擷取。如果不存在,系統會使用來自呼叫者憑證的區域。
AccountId 是從呼叫者憑證取得。
SourceIdentifier 在 中的資產上 DataZone
AssetCommonDetailForm
有一個名為 "sourceIdentifier" 的屬性,代表資產所代表資料集的識別碼。若要將資產譜系節點與上游資料集連結,屬性需要填入與資料集節點 相符的值sourceIdentifier
。如果資料來源匯入資產,工作流程ARN會自動填入sourceIdentifier
為 AWS Glue 資料表/Redshift ARN 資料表,而透過 建立的其他資產 (包括自訂資產) CreateAsset
API應具有來電者填入的值。
Amazon 如何 sourceIdentifier 從 OpenLineage Event DataZone 建構 ?
對於 AWS Glue 和 Redshift 資產, sourceIdentifier
是由 Glue 和 Redshift 所建置ARNs。以下是 Amazon DataZone 建構它的方式:
AWS Glue ARN
目標是建構 OpenLineage 事件,其中輸出譜系節點的 sourceIdentifier
是:
arn:aws:glue:us-east-1:123456789012:table/testlfdb/testlftb-1
若要判斷執行是否使用來自 的資料 AWS Glue,請在environment-properties
構面中尋找特定關鍵字的存在。具體而言,如果其中任何指定欄位存在,系統會假設 RunEvent
源自 AWS Glue。
GLUE_VERSION
GLUE_COMMAND_CRITERIA
GLUE_PYTHON_VERSION
"run": { "runId":"4e3da9e8-6228-4679-b0a2-fa916119fthr", "facets":{ "environment-properties":{ "_producer":"https://github.com/OpenLineage/OpenLineage/tree/1.9.1/integration/spark", "_schemaURL":"https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunFacet", "environment-properties":{ "GLUE_VERSION":"3.0", "GLUE_COMMAND_CRITERIA":"glueetl", "GLUE_PYTHON_VERSION":"3" } } }
對於 AWS Glue 執行,您可以使用 symlinks
構面中的名稱來取得資料庫和資料表名稱,該名稱可用於建構 ARN。
需要確保名稱為 databaseName.tableName
:
"symlinks": { "_producer":"https://github.com/OpenLineage/OpenLineage/tree/1.9.1/integration/spark", "_schemaURL":"https://openlineage.io/spec/facets/1-0-0/SymlinksDatasetFacet.json#/$defs/SymlinksDatasetFacet", "identifiers":[ { "namespace":"s3://object-path", "name":"testlfdb.testlftb-1", "type":"TABLE" } ] }
範例COMPLETE事件:
{ "eventTime":"2024-07-01T12:00:00.000000Z", "producer":"https://github.com/OpenLineage/OpenLineage/tree/1.9.1/integration/glue", "schemaURL":"https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent", "eventType":"COMPLETE", "run": { "runId":"4e3da9e8-6228-4679-b0a2-fa916119fthr", "facets":{ "environment-properties":{ "_producer":"https://github.com/OpenLineage/OpenLineage/tree/1.9.1/integration/spark", "_schemaURL":"https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunFacet", "environment-properties":{ "GLUE_VERSION":"3.0", "GLUE_COMMAND_CRITERIA":"glueetl", "GLUE_PYTHON_VERSION":"3" } } } }, "job":{ "namespace":"namespace", "name":"job_name", "facets":{ "jobType":{ "_producer":"https://github.com/OpenLineage/OpenLineage/tree/1.9.1/integration/glue", "_schemaURL":"https://openlineage.io/spec/facets/2-0-2/JobTypeJobFacet.json#/$defs/JobTypeJobFacet", "processingType":"BATCH", "integration":"glue", "jobType":"JOB" } } }, "inputs":[ { "namespace":"namespace", "name":"input_name" } ], "outputs":[ { "namespace":"namespace.output", "name":"output_name", "facets":{ "symlinks":{ "_producer":"https://github.com/OpenLineage/OpenLineage/tree/1.9.1/integration/spark", "_schemaURL":"https://openlineage.io/spec/facets/1-0-0/SymlinksDatasetFacet.json#/$defs/SymlinksDatasetFacet", "identifiers":[ { "namespace":"s3://object-path", "name":"testlfdb.testlftb-1", "type":"TABLE" } ] } } } ] }
根據提交OpenLineage
的事件,輸出譜系節點sourceIdentifier
的 將是:
arn:aws:glue:us-east-1:123456789012:table/testlfdb/testlftb-1
輸出譜系節點將連接至資產的譜系節點,其中資產的 sourceIdentifier
為:
arn:aws:glue:us-east-1:123456789012:table/testlfdb/testlftb-1
Amazon Redshift ARN
目標是建構 OpenLineage 事件,其中輸出譜系節點的 sourceIdentifier
是:
arn:aws:redshift:us-east-1:123456789012:table/workgroup-20240715/tpcds_data/public/dws_tpcds_7
系統會根據命名空間判斷輸入或輸出是否存放在 Redshift 中。具體而言,如果命名空間以 redshift:// 開頭,或包含字串redshift-serverless.amazonaws.com
或 redshift.amazonaws.com
,則它是 Redshift 資源。
"outputs": [ { "namespace":"redshift://workgroup-20240715.123456789012.us-east-1.redshift.amazonaws.com:5439", "name":"tpcds_data.public.dws_tpcds_7" } ]
請注意,命名空間必須採用下列格式:
provider://{cluster_identifier}.{region_name}:{port}
在 redshift-serverless
中:
"outputs": [ { "namespace":"redshift://workgroup-20240715.123456789012.us-east-1.redshift-serverless.amazonaws.com:5439", "name":"tpcds_data.public.dws_tpcds_7" } ]
導致下列結果 sourceIdentifier
arn:aws:redshift-serverless:us-east-1:123456789012:table/workgroup-20240715/tpcds_data/public/dws_tpcds_7
根據提交 OpenLineage 的事件,sourceIdentifier
要映射到下游 (即事件的輸出) 譜系節點的 為:
arn:aws:redshift-serverless:us-e:us-east-1:123456789012:table/workgroup-20240715/tpcds_data/public/dws_tpcds_7
這是可協助您視覺化目錄中資產譜系的映射。
替代方法
未符合上述任何條件時,系統會使用命名空間 /name 來建構 sourceIdentifier
:
"inputs": [ { "namespace":"arn:aws:redshift:us-east-1:123456789012:table", "name":"workgroup-20240715/tpcds_data/public/dws_tpcds_7" } ], "outputs": [ { "namespace":"arn:aws:glue:us-east-1:123456789012:table", "name":"testlfdb/testlftb-1" } ]
對資產譜系節點缺少上游進行故障診斷
如果您沒有看到資產譜系節點的上游,您可以執行下列動作來疑難排解為何它未與資料集連結:
在提供
domainId
和GetAsset
時叫用assetId
:aws datazone get-asset --domain-identifier <domain-id> --identifier <asset-id>
回應顯示如下:
{ ..... "formsOutput": [ ..... { "content": "{\"sourceIdentifier\":\"arn:aws:glue:eu-west-1:123456789012:table/testlfdb/testlftb-1\"}", "formName": "AssetCommonDetailsForm", "typeName": "amazon.datazone.AssetCommonDetailsFormType", "typeRevision": "6" }, ..... ], "id": "<asset-id>", .... }
叫用
GetLineageNode
以取得資料集譜系節點sourceIdentifier
的 。由於無法直接取得對應資料集節點的譜系節點,因此您可以在任務執行GetLineageNode
時從 開始:aws datazone get-lineage-node --domain-identifier <domain-id> --identifier <job_namespace>.<job_name>/<run_id> if you are using the getting started scripts, job name and run ID are printed in the console and namespace is "default". Otherwise you can get these values from run event content.
回應範例如下所示:
{ ..... "downstreamNodes": [ { "eventTimestamp": "2024-07-24T18:08:55+08:00", "id": "afymge5k4v0euf" } ], "formsOutput": [ <some forms corresponding to run and job> ], "id": "<system generated node-id for run>", "sourceIdentifier": "default.redshift.create/2f41298b-1ee7-3302-a14b-09addffa7580", "typeName": "amazon.datazone.JobRunLineageNodeType", .... "upstreamNodes": [ { "eventTimestamp": "2024-07-24T18:08:55+08:00", "id": "6wf2z27c8hghev" }, { "eventTimestamp": "2024-07-24T18:08:55+08:00", "id": "4tjbcsnre6banb" } ] }
透過傳入下游/上游節點識別符 (您認為應該連結至資產節點)
GetLineageNode
再次叫用,因為這些識別符對應至資料集:使用上述範例回應的範例命令:
aws datazone get-lineage-node --domain-identifier <domain-id> --identifier afymge5k4v0euf
這會傳回對應至資料集的譜系節點詳細資訊:afymge5k4v0euf
{ ..... "domainId": "dzd_cklzc5s2jcr7on", "downstreamNodes": [], "eventTimestamp": "2024-07-24T18:08:55+08:00", "formsOutput": [ ..... ], "id": "afymge5k4v0euf", "sourceIdentifier": "arn:aws:redshift:us-east-1:123456789012:table/workgroup-20240715/tpcds_data/public/dws_tpcds_7", "typeName": "amazon.datazone.DatasetLineageNodeType", "typeRevision": "1", .... "upstreamNodes": [ ... ] }
比較此資料集節點
sourceIdentifier
的 和來自 的回應GetAsset
。如果未連結,則這些項目將不相符,因此不會出現在譜系使用者介面中。
不相符的案例和緩解措施
以下是不匹配的常見案例,以及可能的緩解措施:
根本原因 :資料表存在於與 Amazon DataZone 網域帳戶不同的帳戶中。
緩解 :您可以從相關聯的 帳戶叫用 PostLineageEvent
操作。當accountId
要建構 的 ARN 是從呼叫者憑證中挑選時,您可以在執行入門指令碼或叫用 時,從包含資料表的帳戶擔任角色PostLineageEvent
。這樣做將有助於ARNs正確建構 並與資產節點連結。
根本原因 :ARN適用於 Redshift 的 table/views contains Redshift/Redshift-serverless,以 OpenLineage 執行事件中對應資料集資訊的命名空間和名稱屬性為基礎。
緩解 :由於沒有確定性的方法可以知道指定名稱是否屬於叢集或工作群組,因此我們使用以下經驗式:
如果對應至資料集的「名稱」包含「
redshift-serverless.amazonaws.com
」,我們會使用 redshift-serverless 作為 的一部分ARN,否則預設為「redshift」。上述表示工作群組名稱上的別名將無法運作。
根本原因 :自訂資產的上游資料集未正確連結。
緩解 :請務必叫用與資料集節點 (自訂節點為 <namespace>/<name>) 相符sourceIdentifier
的 CreateAsset
/CreateAssetRevision
,以填入資產sourceIdentifier
上的 。