【问题标题】:how to move data between datasets in different regions?如何在不同区域的数据集之间移动数据?
【发布时间】:2023-01-30 18:03:50
【问题描述】:

我正在使用与 Firebase 集成的 BigQuery,所有数据集都在同一个项目中。我的analytics 数据集在useast-4 但出于某种原因我的firebase_imported_segments 数据集区域被标记为US 我想将数据从 analytics 数据集移动到 firebase_imported_segments 中的表中。

起初,我尝试了一个简单的 INSERT 查询,但出现错误 firebase_imported_segments was not found in location us-east4

因此,我尝试构建一个 SELECT 语句并使用“保存结果 > 大查询表”导出行,但这给出了一个类似的错误,即找不到目标数据集。奇怪的是,如果我在firebase_imported_segments 中创建一个表并尝试使用该表名保存结果,我会收到“表已存在”错误。所以并不是它找不到firebase_imported_segments 数据集,它只是不会在该数据集中创建新表。

我该如何解决这个问题?我看到一些 BQ 文档表明在区域之间移动数据是可能的,但我没有简单地介绍它是如何完成的。我也很困惑为什么 firebase 会在一个特定区域 (useast-4) 中放置一些数据,然后在多区域 (US) 中放置其他数据,如果它们不兼容的话。

【问题讨论】:

    标签: firebase google-bigquery


    【解决方案1】:

    您可以使用 BigQuery UI 中的“复制”移动数据集,然后删除旧数据集。见Copy dataset documentation

    选项 1:使用复制按钮。

    1. 转到 Cloud 控制台中的 BigQuery 页面。

    2. 在资源管理器面板中,展开您的项目并选择一个数据集。

    3. 展开更多操作选项(三点按钮)并单击打开。

    4. 单击复制。在出现的“复制数据集”对话框中,执行以下操作:

      一种。在数据集字段中,创建一个新数据集或选择一个 列表中的现有数据集 ID。

      项目中的数据集名称必须是唯一的。项目和数据集 可以在不同地区,但并非所有地区都支持 跨区域数据集复制。

      b.在 Location 字段中,源数据集的位置是 显示。

      C。可选:覆盖目标表的数据和架构 使用源表,选择覆盖目标表 复选框。

      d.要复制数据集,请单击复制。

      为避免额外的存储成本,请考虑删除旧数据集。

      选项 2:使用 BigQuery 数据传输服务。

      1. 启用 BigQuery 数据传输服务。

      2. 为您创建一个传输 数据源。

        我对此进行了测试,可以确认它是否有效。我在 us-east4 中创建了一个名为 analytics_us_regional 的数据集,并有一个名为 east_4_table 的表,并将其复制到位于 US 中的数据集。

        us-east4复制到US数据集:

        启动复制时,会创建一个数据传输作业:

        复制到US

        关于基于firebase export to BQ 位于us-east4 的firebase 中的数据。首次启用导出时,用户将定义表格的位置。可能最初选择了us-east4区域。

    【讨论】:

    • 感谢您的回复。如果 Firebase 正在导出到 us-east4,那么将数据复制到美国不会更改 Firebase 设置,对吗?因此,每次我想将数据从 us-east4 导出到 US 时,我都必须复制整个数据集。那是对的吗?
    • 是的,它不会更改 Firebase 设置。但是您可以查看此 document 更改位置的步骤,这样您就不会在每次导出数据时都手动复制数据集。
    • 有没有办法改为移动firebase_imported_segments 的区域?那里没有可能丢失的数据,但也无法在集成面板中设置其区域。
    • firebase import segments 似乎仍处于测试阶段,还没有设置区域的功能。我建议您创建一个firebase feature request,因为这是一个很有用的功能。
    【解决方案2】:

    不知道它是否适用于你的情况,但我在 europe-west1 有一个数据集,我想将它复制到欧盟地区,我已经完成了这两种方式并且都有效:

    第一种方式: 1-单击要复制的数据集,然后单击“复制” 2- 在数据集目的地的复制菜单上,单击“创建新数据集”并选择您希望该数据集所在的目标区域。单击创建数据集。 3 - 在“复制数据集”菜单上单击复制。 4 - 您将收到错误消息“当目标数据集位于 JURISDICTION_EU 中时,无法在 REGION_EUROPE_WEST_1 中创建传输”,但将在您的目标区域中创建没有表的数据集。 5 - 现在,如果您尝试通过单击“复制”并选择在第 4 组中创建的数据集来复制源数据集,它现在可以工作了。

    第二种方式: (最好的办法) 1 - 打开一个新的查询表点击更多->查询设置->高级选项,取消选中“自动位置选择”并选择您想要的目标区域或多区域(在我的例子中是欧盟)。 2- 在此查询表上运行“CREATE SCHEMA your_new_dataset_name”-> 这将在第 1 点中选择的目标区域中创建数据集“your_new_dataset_name”。 3 - 单击要复制的数据集,然后单击“复制”。 4 - 在数据集目的地的复制菜单上,选择第 2 点中创建的数据集,然后单击复制。

    这两种方式都使用 BigQuery 数据传输服务,但您不需要直接访问该服务。 事实上,这两种方法做的事情完全相同,即在您要复制的正确区域中创建目标空数据集,一旦复制功能将正常工作。

    【讨论】:

      猜你喜欢
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 2021-06-14
      • 1970-01-01
      相关资源
      最近更新 更多