![](/img/trans.png)
[英]Using BigQuery - INSERT INTO to copy data from one nested table into another nested table
[英]How to insert Billing Data from one Table into another Table in BigQuery
我有兩個表,兩個表都來自兩個不同區域的 GCP 計費數據。 我想將一個表插入另一個表。 這兩個表都按天分區,GCP 正在寫入較大的一個以進行計費導出,這就是為什么我想將數據插入到較大的表中。
我正在嘗試以下操作:
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_table到big_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.