google-cloud-platform - 如何将账单数据从一个表插入 BigQuery 中的另一个表
问题描述
我有两个表,两个表都来自两个不同区域的 GCP 计费数据。我想将一个表插入另一个表。这两个表都按天分区,GCP 正在写入较大的一个以进行计费导出,这就是为什么我想将数据插入到较大的表中。
我正在尝试以下操作:
- 将较小的表导出到 Google Cloud Storage (GCS),以便可以将其导入到其他区域。
- 将 GCS 中的表导入 Big Query。
- 使用 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 格式导出和导入数据,并在重新导入表时使用自动检测模式(时间戳与整数类型混淆)。
解决方案
将 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,因为它们已经被使用了。此外,我没有选择目标数据集中的所有列,但我在目标表中选择的所有列也必须在源表选择中。
第二种方法,您可以简单地使用查询设置按钮将small_billing_table附加到big_billing_table。在 BigQuery 控制台中,点击更多>>查询设置。然后将出现设置窗口,您转到目标表,选中为查询结果设置目标表,填写字段:项目名称、数据集名称和表名称-这些是目标表的信息-。随后,在 Destination 表中写入首选项检查Append to table,根据文档:
追加到表 - 将查询结果追加到现有表
然后运行以下查询:
Select * from <project.dataset.source_table>
然后在运行它之后,源的表数据应该附加到目标的表中。
推荐阅读
- javascript - 暂时隐藏 HTML / Bootstrap 元素正在改变它们的宽度
- java - 将 JRE 版本从 8u241 升级到 8u261 是在使用 LSSerializer 回写时从 xml 文件中删除命名空间(xmlns)标签
- twitter-bootstrap - Bootstrap - 列映射(类似于 row-cols-*)
- ios - 如何在 AWS Cognito 中设置排序键(辅助键)?
- python - mysql.connector.errors.ProgrammingError:处理格式参数失败;Python 'list' 无法转换为 MySQL 类型
- mysql - 将用户 ID 的 SQL 查询与第二个表的单独查询相结合
- javascript - 生成令牌以调用 Dialogflow V2
- django - 在从浏览器访问的 Heroku 上运行 Django 的内部服务器错误
- python - 使用自定义函数时,Pandas 应用/映射在某些行不起作用
- html - 仅部分之间的表 td 的边框间距