簡體   English   中英

如何將賬單數據從一個表插入 BigQuery 中的另一個表

[英]How to insert Billing Data from one Table into another Table in BigQuery

我有兩個表,兩個表都來自兩個不同區域的 GCP 計費數據。 我想將一個表插入另一個表。 這兩個表都按天分區,GCP 正在寫入較大的一個以進行計費導出,這就是為什么我想將數據插入到較大的表中。

我正在嘗試以下操作:

  1. 將較小的表導出到 Google Cloud Storage (GCS),以便可以將其導入到其他區域。
  2. 將 GCS 中的表導入 Big Query。
  3. 使用 Big Query SQL 運行INSERT INTO dataset.big_billing_table SELECT * FROM dataset.small_billing_table

但是,我遇到了很多問題,因為它不僅讓我插入(因為架構中有重復的字段等)。 可以在此處找到數據集的示例https://bigquery.cloud.google.com/table/data-analytics-pocs:public.gcp_billing_export_v1_EXAMPL_E0XD3A_DB33F1

謝謝:)


## 更新 ##

所以問題是使用 Avro 格式導出和導入數據,並在重新導入表時使用自動檢測模式(時間戳與 integer 類型混淆)。

解決方案

將 JSON 格式的小表導出到 GCS,使用 GCS 進行文件的區域傳輸,然后將 JSON 文件導入 Bigquery 表,不要使用模式自動檢測(例如手動指定模式)。 然后你可以使用 INSERT INTO 沒有問題等。

我能夠使用您提供的示例數據集重現您的案例。 我使用了從以下查詢生成的虛擬表來證實這些案例:

表 1:billing_bigquery

SELECT * FROM `data-analytics-pocs.public.gcp_billing_export_v1_EXAMPL_E0XD3A_DB33F1`  
    where service.description ='BigQuery' limit 1000

表 2:billing_pubsub

SELECT * FROM `data-analytics-pocs.public.gcp_billing_export_v1_EXAMPL_E0XD3A_DB33F1`  
    where service.description ='Cloud Pub/Sub' limit 1000

我將提出兩種執行此任務的方法。 但是,我必須指出,目標表和源表必須具有相同的列名,至少是您要插入的列名。

首先,我使用了 INSERT TO方法。 但是,我想強調的是,根據文檔,如果您的表已分區,則必須包含將用於插入新行的列名。 因此,使用已經顯示的虛擬數據,它將如下:

INSERT INTO `billing_bigquery` ( billing_account_id, service, sku, usage_start_time, usage_end_time, project, labels, system_labels, location, export_time, cost, currency, currency_conversion_rate, usage, credits  )#invoice, cost_type 
SELECT billing_account_id, service, sku, usage_start_time, usage_end_time, project, labels, system_labels, location, export_time, cost, currency, currency_conversion_rate, usage, credits 
FROM `billing_pubsub`

請注意,對於嵌套字段,我只寫下字段名稱,例如: service而不是service.description ,因為它們已經被使用了。 此外,我沒有 select 目標數據集中的所有列,但我在目標表中選擇的所有列也必須在源表選擇中。

第二種方法,您可以簡單地使用查詢設置按鈕將 append 的small_billing_tablebig_billing_table 在 BigQuery 控制台中,點擊更多>>查詢設置 然后設置 window 將出現,你 go 到Destination table ,檢查Set a destination table for query results ,填寫字段:項目名稱,數據集名稱和表名稱- 這些是目標表的信息 - 隨后,在Destination table write preference check Append to table ,根據文檔

Append 到表 - 將查詢結果附加到現有表

然后運行以下查詢:

Select * from <project.dataset.source_table>

然后在運行它之后,源的表數據應該附加到目標的表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM