將 Cloud Storage 資料載入 BigQuery
您可以使用 Cloud Storage 專用 BigQuery 資料移轉服務連接器,將資料從 Cloud Storage 載入 BigQuery。您可以使用 BigQuery 資料移轉服務,安排週期性移轉工作,將 Cloud Storage 中的最新資料新增至 BigQuery。
事前準備
建立 Cloud Storage 資料移轉作業之前,請先完成下列步驟:
- 確認您已完成啟用 BigQuery 資料移轉服務中的一切必要動作。
- 請擷取您的 Cloud Storage URI。
- 請建立 BigQuery 資料集來儲存您的資料。
- 建立資料移轉作業的目的地資料表,並指定結構定義。
- 如果您打算指定客戶管理的加密金鑰 (CMEK),請確保服務帳戶具有加密和解密權限,且您擁有使用 CMEK 時所需的 Cloud KMS 金鑰資源 ID。如要瞭解 CMEK 如何與 BigQuery 資料移轉服務搭配運作,請參閱指定移轉作業加密金鑰。
限制
從 Cloud Storage 到 BigQuery 的週期性資料移轉作業會受到下列限制:
- 只要資料移轉的檔案符合由萬用字元或執行階段參數所定義的模式,就必須使用您為目的地資料表設定的結構定義,否則移轉作業會失敗。在執行階段之間變更資料表結構定義,也會導致移轉失敗。
- 由於 Cloud Storage 提供物件版本管理功能,請務必注意 BigQuery 資料移轉作業並不支援已封存的 Cloud Storage 物件。只有未封存的物件才能移轉。
- 不同於從 Cloud Storage 將資料個別載入到 BigQuery,對於持續進行的資料移轉作業,您必須在設定移轉前先建立目標資料表。如果是 CSV 和 JSON 檔案,您也必須預先定義表格結構定義。BigQuery 無法在週期性資料移轉流程期間建立資料表。
- 從 Cloud Storage 進行資料移轉時,系統預設會將「寫入偏好設定」參數設為
APPEND
。在這個模式下,未經修改的檔案只能載入 BigQuery 一次。如果檔案的last modification time
屬性更新,檔案就會重新載入。 如果 Cloud Storage 檔案在資料移轉期間經過修改,BigQuery 資料移轉服務無法保證所有檔案都會移轉,或只移轉一次。將資料從 Cloud Storage 值區載入 BigQuery 時有下列限制:
BigQuery 不保證外部資料來源的資料一致性。如果基礎資料在查詢執行期間遭到變更,可能會導致非預期的行為。
BigQuery 不支援 Cloud Storage 物件版本控管。如果 Cloud Storage URI 中包含產生號碼,載入作業就會失敗。
另外,Cloud Storage 來源資料的格式可能會造成其他限制。如需詳細資訊,請參閱:
Cloud Storage 值區必須位於與 BigQuery 中目的地資料集的地區或多地區相容的位置。這就是所謂的「共置」。詳情請參閱 Cloud Storage 轉移的資料位置。
間隔下限
- 系統會立即選取來源檔案進行資料移轉,不設檔案建立時間下限。
- 週期性資料移轉作業之間的最短間隔時間為 15 分鐘。週期性資料移轉作業的預設間隔為每 24 小時一次。
- 您可以設定事件觸發的轉移作業,自動排定資料轉移作業,縮短間隔時間。
所需權限
將資料載入 BigQuery 時,您必須具備相關權限才能將資料載入新的或現有的 BigQuery 資料表和分區。如要載入 Cloud Storage 中的資料,您也必須具備資料所屬值區的存取權。請確認您已擁有下列必要權限:
BigQuery:確認建立資料移轉作業的人員或服務帳戶在 BigQuery 中具有下列權限:
- 建立資料移轉作業的
bigquery.transfers.update
權限 - 目標資料集的
bigquery.datasets.get
和bigquery.datasets.update
權限
bigquery.admin
這個預先定義的 IAM 角色具備bigquery.transfers.update
、bigquery.datasets.update
和bigquery.datasets.get
權限。如要進一步瞭解 BigQuery 資料移轉服務中的身分與存取權管理角色,請參閱存取權控管。- 建立資料移轉作業的
Cloud Storage:您必須取得個別值區或更高層級的
storage.objects.get
權限。如要使用 URI 萬用字元,您還必須具備storage.objects.list
權限。如果要在每次成功移轉後刪除來源檔案,您也需要具有storage.objects.delete
權限。storage.objectAdmin
預先定義的 IAM 角色具有以上所有權限。
設定 Cloud Storage 轉移作業
如要在 BigQuery 資料移轉服務中建立 Cloud Storage 資料移轉作業,請按照下列步驟操作:
主控台
前往 Google Cloud 控制台的「資料移轉」頁面。
按一下
「建立移轉作業」。在「Source type」(來源類型) 區段中,針對「Source」(來源),選擇「Google Cloud Storage」。
在「Transfer config name」(轉移設定名稱) 專區,針對「Display name」(顯示名稱) 輸入資料移轉作業的名稱,例如
My Transfer
。移轉作業名稱可以是任意值,日後需要修改移轉作業時能夠據此識別。在「Schedule options」(排程選項) 部分選取「Repeat frequency」(重複執行頻率):
如果選取「Hours」(小時)、「Days」(天)、「Weeks」(週)或「Months」(月),必須一併指定頻率。您也可以選取「Custom」(自訂),自行指定重複頻率。您可以選取「Start now」(立即開始) 或「Start at set time」(在所設時間開始執行),並提供開始日期和執行時間。
如果選取「On-demand」,這項資料移轉作業會在您手動觸發後執行。
如果選取「Event-driven」(以事件為依據),則須一併指定Pub/Sub 訂閱項目。請選取訂閱項目名稱,或是點選「Create a subscription」(建立訂閱項目)。這個選項會啟用以事件為依據的移轉作業,事件傳送至 Pub/Sub 訂閱項目時,就會觸發執行移轉作業。
在「Destination settings」(目的地設定) 部分,「Destination dataset」(目的地資料集) 請選取您為了儲存資料而建立的資料集。
在「Data source details」(資料來源詳細資料) 區段:
- 在「Destination table」(目標資料表) 中輸入目標資料表的名稱。 目的地資料表的名稱必須符合資料表命名規則,目的地資料表名稱也支援參數。
- 在「Cloud Storage URI」部分,輸入 Cloud Storage URI。可以使用萬用字元和參數。如果 URI 與所有檔案都不相符,不會覆寫目的地資料表中任何資料。
「Write preference」(寫入偏好設定) 提供下列選項:
- 「APPEND」(附加):逐步將新的資料附加至現有目的地資料表。「Write preference」(寫入偏好設定) 的預設值為「APPEND」(附加)。
- 「MIRROR」(建立鏡像):每次移轉資料時,覆寫目的地資料表資料。
如要進一步瞭解 BigQuery 資料移轉服務如何使用「APPEND」(附加) 或「MIRROR」(建立鏡像) 來擷取資料,請參閱 Cloud Storage 移轉作業資料擷取的相關說明。 如要進一步瞭解
writeDisposition
欄位,請參閱JobConfigurationLoad
。如要在每次成功移轉資料後刪除來源檔案,請勾選「Delete source files after transfer」方塊。系統會盡可能執行刪除工作,但不保證一定達成。如果第一次刪除來源檔案失敗,不會再重試。
在「Transfer Options」部分執行下列操作:
- 在「All Formats」底下:
- 在「Number of errors allowed」(允許的錯誤數量) 欄位中,輸入 BigQuery 在執行工作時可忽略的錯誤記錄數量上限。如果損壞記錄數量超過這個值,該項工作就會失敗,並在結果傳回
invalid
錯誤。預設值為0
。 - (選用步驟) 在「Decimal target types」部分,輸入以半形逗號分隔的清單,內含來源小數值可能轉換成的 SQL 資料類型。系統會依據下列條件,選取要轉換的 SQL 資料類型:
- 系統會按照
NUMERIC
、BIGNUMERIC
和STRING
的順序,選取下列清單中第一個支援來源資料有效位數和小數位數的資料類型,用來轉換。 - 如果清單中的資料類型都不支援有效位數和小數位數,則會選取指定清單中支援範圍最廣的資料類型。如果讀取來源資料時,值超過支援的範圍,就會擲回錯誤。
- 資料類型
STRING
支援所有有效位數和小數位數值。 - 如果將這個欄位留空,ORC 的預設資料類型為
NUMERIC,STRING
,其他檔案格式則為NUMERIC
。 - 這個欄位不得含有重複的資料類型。
- 您在這個欄位提供資料類型時採用的順序不會有影響。
- 系統會按照
- 在「Number of errors allowed」(允許的錯誤數量) 欄位中,輸入 BigQuery 在執行工作時可忽略的錯誤記錄數量上限。如果損壞記錄數量超過這個值,該項工作就會失敗,並在結果傳回
- 如要在移轉資料時,捨棄不符合目的地資料表結構定義的資料,請勾選「JSON, CSV」(JSON、CSV) 底下的「Ignore unknown values」(略過不明的值) 方塊。
- 如果希望資料移轉作業將 Avro 邏輯類型轉換為對應的 BigQuery 資料類型,請在「AVRO」底下勾選「Use avro logical types」方塊。預設會忽略多數類型的
logicalType
屬性,並改用基礎 Avro 類型。 在「CSV」底下執行下列操作:
- 在「Field delimiter」(欄位分隔符號) 部分輸入分隔欄位的字元。預設值為半形逗號。
- 在「Quote character」(引用字元) 輸入 CSV 檔案中用來引用資料區段的字元,預設值為英文雙引號 (
"
)。 - 如果您不想匯入來源檔案中的標題列,請在「Header rows to skip」(要略過的標題列) 輸入不要匯入的標題列數。預設值為
0
。 - 如果要允許在引用欄位中使用換行符號,請勾選 [Allow quoted newlines] (允許引用換行符號) 的方塊。
- 如要允許移轉缺少
NULLABLE
欄位的資料列,請勾選「Allow jagged rows (CSV)」(允許空值資料列 (CSV)) 方塊。
請參閱此處,進一步瞭解 CSV 適用選項。
- 在「All Formats」底下:
在「Service Account」(服務帳戶) 選單,選取與貴機構 Google Cloud 專案相關聯的服務帳戶。您可以將服務帳戶與資料移轉作業建立關聯,這樣就不需要使用者憑證。如要進一步瞭解如何搭配使用服務帳戶與資料移轉作業,請參閱使用服務帳戶。
選用步驟:在「Notification options」(通知選項) 部分執行下列操作:
選用步驟:如果您使用 CMEK,請在「Advanced options」(進階選項) 部分選取「Customer-managed key」(客戶管理的金鑰),畫面隨即會列出可用的 CMEK 供您選擇。如要瞭解 CMEK 如何與 BigQuery 資料移轉服務搭配運作,請參閱指定移轉作業加密金鑰的相關說明。
按一下 [儲存]。
bq
輸入 bq mk
指令並提供移轉建立標記 - --transfer_config
。還需加上以下旗標:
--data_source
--display_name
--target_dataset
--params
選用標記:
--destination_kms_key
:指定 Cloud KMS 金鑰的金鑰資源 ID。如果使用客戶管理加密金鑰 (CMEK) 進行這項資料轉移,如要瞭解 CMEK 如何與 BigQuery 資料移轉服務搭配運作,請參閱指定移轉作業加密金鑰。--service_account_name
:指定要用於 Cloud Storage 移轉驗證的服務帳戶,而非使用者帳戶。
bq mk \ --transfer_config \ --project_id=PROJECT_ID \ --data_source=DATA_SOURCE \ --display_name=NAME \ --target_dataset=DATASET \ --destination_kms_key="DESTINATION_KEY" \ --params='PARAMETERS' \ --service_account_name=SERVICE_ACCOUNT_NAME
其中:
- PROJECT_ID 是您的專案 ID。如未提供
--project_id
指定特定專案,系統會使用預設專案。 - DATA_SOURCE 是資料來源,例如
google_cloud_storage
。 - NAME 是資料移轉設定的顯示名稱。移轉作業名稱可以是任意值,日後需要修改移轉作業時,能夠據此識別即可。
- DATASET 是移轉設定的目標資料集。
- DESTINATION_KEY:Cloud KMS 金鑰資源 ID,例如
projects/project_name/locations/us/keyRings/key_ring_name/cryptoKeys/key_name
。 - PARAMETERS 含有已建立移轉設定的 JSON 格式參數,例如:
--params='{"param":"param_value"}'
。destination_table_name_template
:目的地 BigQuery 資料表的名稱。data_path_template
:包含要移轉檔案的 Cloud Storage URI。可以使用萬用字元和參數。write_disposition
:決定要將相符檔案附加至目的地資料表,還是完全鏡像複製。支援的值為APPEND
或MIRROR
。如要瞭解 BigQuery 資料移轉服務如何在 Cloud Storage 移轉作業中附加或建立鏡像資料,請參閱「Cloud Storage 移轉作業資料擷取」。file_format
:要轉移的檔案格式。格式可以是CSV
、JSON
、AVRO
、PARQUET
或ORC
。預設值為CSV
。max_bad_records
:針對任何file_format
值,可忽略的錯誤記錄數量上限。預設值為0
。decimal_target_types
:針對任何file_format
值,以半形逗號分隔的清單,內含來源小數值可能轉換成的 SQL 資料類型。如果未提供這個欄位,ORC
的預設資料類型為"NUMERIC,STRING"
,其他檔案格式則為"NUMERIC"
。ignore_unknown_values
:針對任何file_format
值,設為TRUE
即可接受含有與結構定義不符值的資料列。詳情請參閱JobConfigurationLoad
參考資料表中的ignoreUnknownvalues
欄位詳細資料。use_avro_logical_types
:如為AVRO
file_format
值,請設為TRUE
,將邏輯型別解讀為對應型別 (例如TIMESTAMP
),而非僅使用原始型別 (例如INTEGER
)。parquet_enum_as_string
:如為PARQUET
file_format
值,請設為TRUE
,將PARQUET
ENUM
邏輯型別推斷為STRING
,而非預設的BYTES
。parquet_enable_list_inference
:如為PARQUET
file_format
值,請設為TRUE
,以便專門針對PARQUET
LIST
邏輯型別使用結構定義推論。reference_file_schema_uri
:參照檔案的 URI 路徑,其中包含讀取器結構定義。field_delimiter
:適用於CSV
file_format
值,用來分隔欄位的字元。預設值為半形逗號。quote
:適用於CSV
file_format
值,CSV 檔案中用來引用資料區段的字元。預設值為英文雙引號 ("
)。skip_leading_rows
:針對CSV
file_format
值,指出您不想匯入的開頭標題列數。預設值為 0。allow_quoted_newlines
:如為CSV
file_format
值,請設為TRUE
,允許在加上引號的欄位中換行。allow_jagged_rows
:針對CSV
file_format
值,請設為TRUE
,接受缺少結尾自選欄的資料列。缺少的值會填入NULL
。preserve_ascii_control_characters
:針對CSV
file_format
值,請設為TRUE
,保留所有內嵌的 ASCII 控制字元。encoding
:指定CSV
編碼類型。支援的值為UTF8
、ISO_8859_1
、UTF16BE
、UTF16LE
、UTF32BE
和UTF32LE
。delete_source_files
:設為TRUE
,即可在每次成功移轉後刪除來源檔案。如果首次刪除來源檔案失敗,系統並不會重試刪除工作。預設值為FALSE
。
- SERVICE_ACCOUNT_NAME 是用於驗證移轉作業的服務帳戶名稱。服務帳戶應由用於建立轉移作業的
project_id
擁有,且應具備所有必要權限。
舉例來說,下列指令會使用 gs://mybucket/myfile/*.csv
的 data_path_template
值、目標資料集 mydataset
以及 file_format
CSV
,建立名為 My Transfer
的 Cloud Storage 資料移轉作業。本範例包含有關 CSV
file_format 的選用參數非預設值。
資料移轉作業會在預設專案中建立:
bq mk --transfer_config \
--target_dataset=mydataset \
--project_id=myProject \
--display_name='My Transfer' \
--destination_kms_key=projects/myproject/locations/mylocation/keyRings/myRing/cryptoKeys/myKey \
--params='{"data_path_template":"gs://mybucket/myfile/*.csv",
"destination_table_name_template":"MyTable",
"file_format":"CSV",
"max_bad_records":"1",
"ignore_unknown_values":"true",
"field_delimiter":"|",
"quote":";",
"skip_leading_rows":"1",
"allow_quoted_newlines":"true",
"allow_jagged_rows":"false",
"delete_source_files":"true"}' \
--data_source=google_cloud_storage \
--service_account_name=abcdef-test-sa@abcdef-test.iam.gserviceaccount.com projects/862514376110/locations/us/transferConfigs/ 5dd12f26-0000-262f-bc38-089e0820fe38
執行指令後,您會收到如下的訊息:
[URL omitted] Please copy and paste the above URL into your web browser and
follow the instructions to retrieve an authentication code.
請按照指示進行操作,並在指令列中貼上驗證碼。
API
請使用 projects.locations.transferConfigs.create
方法,並提供 TransferConfig
資源的執行個體。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
指定轉移作業的加密金鑰
您可以指定客戶自行管理的加密金鑰 (CMEK),為轉移作業加密資料。您可以使用 CMEK 支援從 Cloud Storage 移轉資料。指定移轉作業的 CMEK 後,BigQuery 資料移轉服務會將 CMEK 套用至所有已擷取資料的中間磁碟快取,確保整個資料移轉工作流程符合 CMEK 規定。
如果轉移作業最初並非使用 CMEK 建立,您就無法更新現有轉移作業來新增 CMEK。舉例來說,您無法將原本預設加密的目的地資料表,變更為使用 CMEK 加密。反之,您也無法將 CMEK 加密的目的地資料表變更為其他類型的加密。
如果移轉設定最初是使用 CMEK 加密建立,您可以更新移轉的 CMEK。更新移轉作業設定的 CMEK 時,BigQuery 資料移轉服務會在下次執行移轉作業時,將 CMEK 傳播至目的地資料表。屆時,BigQuery 資料移轉服務會在移轉作業執行期間,以新的 CMEK 取代任何過時的 CMEK。詳情請參閱「更新轉移作業」。
您也可以使用專案預設鍵。 使用移轉作業指定專案預設金鑰時,BigQuery 資料移轉服務會將專案預設金鑰做為任何新移轉作業設定的預設金鑰。
手動觸發轉移程序
除了自動排定的 Cloud Storage 資料移轉作業之外,您也可以手動觸發移轉作業,載入其他資料檔案。
如果移轉設定是在執行階段參數化,您需要指定日期範圍,系統會針對該範圍啟動額外的移轉作業。
如要觸發資料轉移,請按照下列步驟操作:
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
按一下
「資料移轉」。從清單中選取資料轉移作業。
按一下「立即執行移轉作業」或「排定補充作業」 (適用於執行階段參數化移轉設定)。
如果您點選「立即執行轉移作業」,請視需要選取「執行一次性轉移作業」或「在特定日期執行」。如果選取「在特定日期執行」,請選取特定日期和時間:
如果點選「安排補充作業」,請視需要選取「執行一次性轉移作業」或「在指定日期範圍內執行」。如果選取「在指定日期範圍內執行」,請選取開始和結束日期與時間:
按一下 [確定]。
bq
輸入 bq mk
指令並提供 --transfer_run
旗標。您可以使用 --run_time
旗標,也可以使用 --start_time
和 --end_time
旗標。
bq mk \ --transfer_run \ --start_time='START_TIME' \ --end_time='END_TIME' \ RESOURCE_NAME
bq mk \ --transfer_run \ --run_time='RUN_TIME' \ RESOURCE_NAME
其中:
START_TIME 和 END_TIME 是以
Z
結尾或包含有效時區設定的時間戳記。例如:2017-08-19T12:11:35.00Z
2017-05-25T00:00:00+00:00
RUN_TIME 是時間戳記,用來指定排定資料移轉執行作業的時間。如要執行一次性轉移,可以使用
--run_time
標記。RESOURCE_NAME 是移轉的資源名稱 (也稱為移轉設定),例如
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7
。如果您不知道移轉的資源名稱,請執行bq ls --transfer_config --transfer_location=LOCATION
指令來尋找資源名稱。
API
使用 projects.locations.transferConfigs.startManualRuns
方法,並使用 parent
參數提供移轉設定資源。
後續步驟
- 瞭解 Cloud Storage 移轉作業中的執行階段參數。
- 進一步瞭解 BigQuery 資料移轉服務。