sql - 如何将数据从谷歌数据存储实体下载到本地?

标签 sql database google-app-engine google-cloud-datastore google-cloud-platform

我尝试将实体备份到存储桶中,然后将该备份数据文件下载到我的本地,但该文件也包含垃圾数据。

我正在尝试做的是将数据存储实体移动到云 sql 数据库。现在的计划是将数据存储实体下载到本地并从中生成一个 .sql 文件,然后使用它在云 sql 实例中创建数据库。

最佳答案

Google App Engine 的数据存储区 import/export不使用标准格式。您可以使用 [1] 中描述的方法阅读它或 [2] .您还可以从这些文件导入到 BigQuery您可以更轻松地从中导出。

另一种方法是使用 Datastore API 以编程方式从 Datastore 中检索实体以写入您的 SQL 实例。您甚至可以在 Cloud Dataflow 中执行此操作它具有用于读取数据存储和写入 SQL 的工具(通过 Apache Beam 中的 JDBC)。


无论您实际如何实现提取,都需要考虑一些额外的“问题”:

  1. Datstore 实体可以有“祖先”。这在 SQL 中不存在。您可能希望每个实体类型都有一个单独的表。子实体的表应该有一列指示不同表中的实体是父实体。

  2. Datastore 支持数组属性,而 SQL 不支持。如果您使用数组,您将需要找到一些方法来在您的目标模式中表达它。通常这是通过一个单独的表和一个关系来实现的。因此,例如,如果您在 Person 实体中有一个带有数字列表的“telephone_numbers”属性,您可能需要一个包含两列的“telephone”表 - “person_id”和“telephone_number”。

  3. Datastore 允许相同实体类型的不同实体具有不同的属性,或者相同的属性具有不同的类型。这在 SQL 中是不允许的,您需要确保同一张表中的每条记录都有一个统一的模式。

关于sql - 如何将数据从谷歌数据存储实体下载到本地?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46346619/

相关文章:

php - 使用 codeigniter 在数据库中存储注销时间

sql - 我可以让这个具有复杂 COUNT 的 MySQL 语句更加高效吗?

c# - 使用 RIGHT JOINT 将两个表连接到一个数据 GridView 中

database - Oracle自动授予权限

mysql - 由于数据类型, '' 中的未知列 'field list'

java - Google 端点 - Android GoogleAuthIOException Tic Tac Toe - 删除了 clientIds

mysql - SQL CONCAT - 有趣的字符 - 但我没有笑

mysql - 在 MySQL 中使用临时表或游标时未获得预期的输出

python - 可以使用 python 应用程序引擎在 URL 中找出 if#

java - 无法从数据存储中读取