Logging 计费-将历史BQ日志从旧表复制到新表。谷歌云平台

Logging 计费-将历史BQ日志从旧表复制到新表。谷歌云平台,logging,google-bigquery,Logging,Google Bigquery,谷歌云大查询问题 情况: GCP BQ日志路由到we2区域的“计费”项目 已创建新项目“BillingNew”(欧盟地区),并要求将BQ日志传输到此项目。另外,移动历史数据 问题是: 如何将旧的计费数据插入新的计费项目以及不同项目之间的嵌套表。如果使用分区表,BigQuery不允许同时复制多个分区表。 如果只迁移一次表,我建议您在SHELLScript中执行以下操作: tables=("20200107" "20200106" "20200105" "20200104") for v

谷歌云大查询问题

情况:

  • GCP BQ日志路由到we2区域的“计费”项目
  • 已创建新项目“BillingNew”(欧盟地区),并要求将BQ日志传输到此项目。另外,移动历史数据
问题是:
如何将旧的计费数据插入新的计费项目以及不同项目之间的嵌套表。

如果使用分区表,
BigQuery
不允许同时复制多个分区表。 如果只迁移一次表,我建议您在
SHELL
Script中执行以下操作:

tables=("20200107"  "20200106"  "20200105"  "20200104")

for val in ${tables[*]}; do
     bq cp project1:dataset1.table1_$val project2:dataset2.table2_$val
done
您应该将所有日期分区作为字符串放入列表中,然后运行循环。 我希望有帮助

编辑1:

由于在区域之间复制表时遇到问题,我建议如下:

考虑到只迁移一次表,可以在以下区域之间使用数据集副本:

bq mk --transfer_config --project_id=myproject --data_source=cross_region_copy --target_dataset=123_demo_tokyo --display_name='My Dataset Copy' --params='{"source_dataset_id":"123_demo_eu","source_project_id":"mysourceproject","overwrite_destination_table":"true"}'
您可以查看完整的参考资料 如果复制旧数据集并将新数据集设置为目标数据集,则将在其中创建所有表


希望有帮助

为了将账单数据移动到新项目中,首先需要将数据移动到与新数据集相同的区域。您可以按照以下步骤完成此操作。请注意,账单表有嵌套数据;因此,您应该使用支持此类数据的文件格式,如。此外,由于您无法在不同区域之间直接复制数据集,请考虑以下因素

一旦您在Google云存储中拥有数据,您可以按照“”文档将其加载到新的计费表中,请在此步骤中小心,因为有2个选项:。加载类型将取决于分区是新的还是已有数据

另一种选择是使用“Beta”功能;但是,并非所有区域当前都支持数据集复制。您可以在BigQuery数据传输服务当前所在的区域中创建数据集副本。通过使用“复制数据集”功能,我建议您将单独数据集中的数据加载到新项目中(与目标数据集位于同一位置),然后使用将数据添加到目标数据集中


在这两个选项中,如果在单独的数据集中加载历史数据,则可以使用查询作业在新表中加载账单数据。

以防其他人遇到相同的问题:

  • GCP、BQ日志,路由到we2区域的“计费”项目

  • 已创建新项目“BillingNew”(欧盟地区),并要求将BQ日志传输到此项目。另外,移动历史数据

解决方案:

  • 在“BillingNew”上创建新数据集。重新安排所有项目的路线。检查,确保有实时日志

  • 使用“传输作业”将数据集从旧的“billing”复制到新的“BillingNew”项目(以下脚本作为示例):

  • 现在,在同一个项目中,两个数据集都具有相同的日志表模式,并且最重要的数据集位于同一区域(EU)
  • 使用SQL语法“insert into newtable…select*from oldtable…”
  • 完成后,在同一个表中有活动日志和旧日志,包括分区等
  • 其他方式:

  • 将粘贴数据集从旧项目复制到新项目
  • 在那里发送BQ日志。重新路由项目时会丢失一些记录,它们将记录在旧表中。因此最终需要复制差距数据

  • 感谢您提出使用“转移作业”和复制数据集的建议,因为GCP生成的结构化分区表太复杂,无法使用。

    您能更好地说明您的问题吗?在GCP,有一个项目1,有数据集计费1,所有BQ日志都在该项目中路由。任何项目中与BQ相关的每个操作都会记录到自动表中,即“cloudaudit\u googleapis\u com\u data\u access\u 20200107”。您的表是否按日期分区?是的,路由日志的表由google自动创建,并按日期分区,大多数列都是嵌套的(结构化的)如果在不同区域的项目之间进行复制,这似乎是不可能的。在我们的例子中,旧表在europe-west2,新表在eu。我在同一区域的项目之间尝试了一个测试复制表,结果很好。请查看命令和错误。命令:“xxx@cloudshell:~(Project1)$bq cp Project1:Dataset1.Table1 ProjectX:Dataset2.NewTable“错误:”cp操作中的BigQuery错误:未找到:Dataset ProjectX:Dataset2“如果我尝试在同一区域(不同项目)的数据集之间复制测试表,它会正常运行。ProjectX中肯定存在“数据集2”。“Dataset1”是“west-europe2”,“Dataset2”是“EU”区域。您的数据集是否只有您要复制的表,还是有更多的表?出于测试目的,源Dataset1只有此表,目标Dataset2为空,还没有表。
    bq mk --transfer_config --project_id=TARGET_PROJECT_ID --data_source=cross_region_copy --target_dataset=TARGET_DATASET_NAME --display_name='Transfer job name, type any' --params='{"source_dataset_id":"SOURCE_DATASET_NAME(ID)","source_project_id":"SOURCE_PROJECT_NAME(ID)","overwrite_destination_table":"true"}'