本文說明如何使用 searchLineageStreaming API 查詢多層級跨區域資料沿襲。
searchLineageStreaming
API 會從一組已定義的根實體開始,在指定方向 (上游或下游) 執行廣度優先搜尋,並以即時串流回應的形式傳回統一的沿襲圖。
詳情請參閱「關於多區域沿襲搜尋」。
主要功能
searchLineageStreaming API 包含下列功能:
廣度優先搜尋:逐層遍歷沿襲圖,準確計算每個連結資產的深度。
串流回應:在後端系統探索到子圖和沿襲連結時,就會傳回這些項目。這項功能非常適合廣泛或深入的沿襲圖,可避免要求逾時。
多個位置和多個專案的遍歷:雖然您只在要求路徑中指定一個帳單專案,但只要您具備必要權限,API 就會自動探索並遍歷多個 Google Cloud 專案和地理位置的歷程連結。
精細的資料欄層級歷程:支援搜尋資產間的資料欄層級依附元件。
萬用字元查詢:在完整名稱 (FQN) 後方加上
*,即可擷取特定實體的所有欄位層級沿襲。管道洞察:選擇性擷取有關建立沿襲連結的轉換管道 (程序) 的中繼資料。
事前準備
向 API 發出要求前,請先確認您符合下列安全性和環境先決條件:
必要的角色
如要取得搜尋資料歷程連結所需的權限,請要求系統管理員在儲存歷程連結和程序的專案中,授予您「資料歷程檢視者 」(roles/datalineage.viewer) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這個預先定義的角色具備搜尋資料沿襲連結所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要搜尋資料沿襲連結,必須具備下列權限:
-
搜尋實體層級的沿襲:
datalineage.events.get在儲存連結的專案中 -
搜尋資料欄層級的沿革:
datalineage.events.getFields在儲存連結的專案中 -
擷取完整管道程序詳細資料:
datalineage.processes.get在儲存程序的專案中
資源範圍
設定 API 要求時,您必須區分用於管理結帳的資源,以及 API 掃描的實際位置:
帳單上層路徑:網址要求中的
parent路徑必須使用projects/project/locations/location格式。這個特定專案/位置組合專門用於評估帳單配額和 API 速率限制。目標位置:在要求主體內的
locations陣列中,明確定義要讓後端掃描的區域。
設定驗證
使用 Google Cloud 存取權杖初始化環境變數,驗證 curl 指令:
export ACCESS_TOKEN=$(gcloud auth print-access-token)
使用範例
下列範例使用 datalineage.googleapis.com 端點。
搜尋多層級、多專案沿襲
如要執行深度沿襲搜尋,跨越多個圖表深度,並掃描不同專案,請定義下列變數: Google Cloud
將
limits.maxDepth設為目標遍歷深度 (接受1到100之間的值)。在
locations陣列中填入後端要交叉比對的目標區域 (例如["us", "us-east1"])。
例如:
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us", "us-east1", "us-central1"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:project-prod.dataset.source_table"
}]
}
},
"direction": "DOWNSTREAM",
"limits": {
"maxDepth": 10,
"maxResults": 5000
}
}'
搜尋多個地理位置
您可以修改 locations 重複陣列欄位中傳遞的地理區域,限制或擴大譜系圖掃描範圍。
例如:
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us", "europe-west1", "asia-south2"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.global_table"
}]
}
},
"direction": "DOWNSTREAM"
}'
擷取歷程連結的程序名稱
根據預設,API 會省略程序資訊 (maxProcessPerLink預設為 0)。如要擷取建立資料連結的管道資源名稱,請將 limits.maxProcessPerLink 設為非零的正整數。
例如:
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.target_table"
}]
}
},
"direction": "UPSTREAM",
"limits": {
"maxProcessPerLink": 5
}
}'
回應行為:產生的串流會在 links[].processes 欄位中填入程序訊息,其中只包含絕對系統資源名稱 (例如 projects/my-project/locations/us/processes/my-process)。
使用 FieldMask 擷取完整程序詳細資料
如果您需要管道的完整結構中繼資料 (例如 displayName、系統 attributes 或執行 origin),而不只是資源名稱,則必須使用 API FieldMask:
為
limits.maxProcessPerLink提供非零值。在網址路徑中附加
fields查詢參數,並指定links.processes.process和其他必填欄位。
例如:
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-X POST "https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming?fields=links.processes.process,links.source,links.target,links.depth" \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.target_table"
}]
}
},
"direction": "UPSTREAM",
"limits": {
"maxProcessPerLink": 5
}
}'
搜尋資料表和資料欄層級的歷程
您可以在單一要求中搜尋資料表層級 (資產層級) 和資料欄層級 (欄位層級) 的沿革,方法是在 rootCriteria.entities.entities 清單中提供多個實體:
如要取得資料表層級的沿襲資訊,請省略
field陣列。如要取得資料欄層級的沿襲資訊,請在
field陣列中指定單一資料欄。
例如:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [
{
"fullyQualifiedName": "bigquery:my-project.dataset.table_a"
},
{
"fullyQualifiedName": "bigquery:my-project.dataset.table_b",
"field": ["email"]
}
]
}
},
"direction": "DOWNSTREAM"
}'
使用萬用字元取得資料欄層級歷程
如要搜尋特定資料表的所有可用資料欄層級沿襲,而不需個別列出每個資料欄,請在 field 陣列中使用萬用字元 * 做為單一值。
例如:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.my_table",
"field": ["*"]
}]
}
},
"direction": "DOWNSTREAM"
}'
篩選沿襲結果
您可以在要求主體中使用 filters 區塊,縮小沿革搜尋結果範圍。
依附屬項目類型篩選
如要將結果限制為特定依附元件類型,例如直接副本 (EXACT_COPY) 或篩選和分組等轉換 (OTHER),請使用 dependencyTypes 篩選器。
例如:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.my_table"
}]
}
},
"direction": "DOWNSTREAM",
"filters": {
"dependencyTypes": ["EXACT_COPY"]
}
}'
僅限資料表歷程
如要確保搜尋結果只會傳回資料表層級的沿襲,並完全排除資料欄層級的沿襲,請將 entitySet 篩選器設為 ENTITIES。
例如:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.my_table"
}]
}
},
"direction": "DOWNSTREAM",
"filters": {
"entitySet": "ENTITIES"
}
}'
依時間範圍篩選
您可以將沿襲搜尋結果限制在特定時間間隔內。
舉例來說,如要搜尋在特定時間戳記之後建立的歷程資料,請使用下列要求:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.my_table"
}]
}
},
"direction": "DOWNSTREAM",
"filters": {
"timeRange": {
"startTime": "2026-01-01T00:00:00Z"
}
}
}'
處理無法連上的位置 (部分結果)
由於串流 API 會同時掃描一組分散的專案和位置,因此在執行期間,部分遠端區域可能會暫時停止運作、無法通訊或設定錯誤。
為保護資料完整性,searchLineageStreamingResponse 串流包含專屬的診斷欄位,稱為 unreachable:
欄位名稱:
unreachable(以重複字串表示)值格式:
projects/PROJECT_NUMBER/locations/LOCATION(例如projects/123456789/locations/us-east1)