0

我的目标是从 vm 实例连接数据并将数据加载到大查询(此实例安装了 maria db 服务器)。我可以在我的终端上使用 tcp ip forwarding 使用此命令访问数据库(出于安全原因,实例没有外部 ip):

gcloud beta compute start-iap-tunnel my-instances 3306 --local-host-port=localhost:3309

之后我打开mysql工作台输入用户root和密码,然后数据库显示,查询,保存到csv,最后是将csv上传到大查询。

有什么建议可以自动化这个过程吗?

4

2 回答 2

2

如果您的虚拟机没有公共 IP,则虚拟机无法访问公共 DNS 上的公共 BigQuery api。所以,使用私有API!

为此,您需要转到您的 VPC,并选择部署您的 Compute Engine 虚拟机的子网。

单击编辑并打开私人 google 访问到 ON 在此处输入图像描述

现在您可以通过内部网络调用 BigQuery API,无需公共 IP。使用 CLI 或脚本来实现加载作业。

于 2020-12-17T20:16:17.373 回答
0

使用 Cloud Workflows 的 Devops 风格。

您可以使用Cloud Workflows和使用Cloud Build的步骤自动执行此操作。

有一个完整的指南发布了如何使用 Cloud Workflows 在 VM 上运行 shell 命令,还有另一个如何使用 Cloud Workflows 将文件从 Cloud Storage 自动化到 BigQuery

除了运行 shell 命令,您还可以使用一系列操作来

  1. 连接到 IAP
  2. 运行 SELECT INTO FILE as csv 命令(转义需要做的事情)
  3. 将文件移动到云存储
  4. 使用加载 API 导入 BigQuery

这样一来,您就不会向 BigQuery 产生加载费用,因为将数据加载到 BQ 是免费的。您将产生 Cloud Storage 费用,但仅限于文件存在且导入后您可以删除它的时间。

使用外部数据源。

您可能想要设置与数据库的 Cloud SQL 连接。通过执行此处定义的步骤查看是否适用于您的设置。

您需要按照指南在外部数据源窗格中输入所需的连接信息,例如云 SQL 实例 ID、用户、密码。

如果连接建立,您可以使用 EXTERNAL_QUERY 语法从 Cloud SQL 实例中读取数据,并写入 BigQuery 表。执行此操作会产生费用,因为查询也会针对从 Cloud SQL 读取的数据计费。

SELECT * FROM EXTERNAL_QUERY("connection_id",
"select * from db.table;");

您可以使用计划查询自动执行此步骤。

https://cloud.google.com/bigquery/docs/cloud-sql-federated-queries#setting-up-cloud-sql-database-connections

于 2020-12-17T15:07:19.940 回答