首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从本地数据库加载数据到大查询

从本地数据库加载数据到大查询
EN

Stack Overflow用户
提问于 2019-09-25 15:51:35
回答 2查看 432关注 0票数 0

我想在Google Big Query中启动一个数据仓库,但我不确定如何实际安排作业来将数据放入云中。

给出一些背景知识。我有一个托管在本地的MySQL数据库,目前我每天晚上都会做一个演示作为备份。我的想法是,我可以将这个转储发送到Google Cloud,并让它将数据导入Big Query。我认为我可以发送转储,然后可能使用云调度函数来运行打开转储并执行此操作的程序,但我不确定这些服务如何组合在一起。

我是Google Cloud的新手,所以如果有更好的方法来实现这一点,那么我很乐意改变我的行动计划。

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2019-09-25 16:21:32

为此,您需要创建一个运行gsutil mb gs://BUCKET_NAME的云存储存储桶。

创建存储桶后,您需要使用finalize选项创建由存储桶触发的云函数。

您可以按照以下示例函数进行操作

代码语言:javascript
复制
'use strict';

const Storage = require('@google-cloud/storage');
const BigQuery = require('@google-cloud/bigquery');

// Instantiates a client
const storage = Storage();
const bigquery = new BigQuery();

/**
 * Creates a BigQuery load job to load a file from Cloud Storage and write the data into BigQuery.
 *
 * @param {object} data The event payload.
 * @param {object} context The event metadata.
 */
exports.loadFile = (data, context) => {
    const datasetId = 'Your_Dataset_name';
    const tableId = 'Your_Table_ID';

    const jobMetadata = {
        skipLeadingRows: 1,
        writeDisposition: 'WRITE_APPEND'
    };

    // Loads data from a Google Cloud Storage file into the table
    bigquery
        .dataset(datasetId)
        .table(tableId)
        .load(storage.bucket(data.bucket).file(data.name), jobMetadata)
        .catch(err => {
            console.error('ERROR:', err);
        });

    console.log(`Loading from gs://${data.bucket}/${data.name} into ${datasetId}.${tableId}`);
};

然后使用所需方案创建BigQuery数据集

现在,您可以将csv文件上传到存储桶中,您将在bigquery中看到上传的数据。

票数 1
EN

Stack Overflow用户

发布于 2019-09-25 16:55:07

由于新的EXTERNAL_QUERY已经上线,您可以从BigQuery查询云SQL实例,因此您现在最好的选择是:

从您的当前实例到云

  • 实例的
  1. 安装副本,请遵循此guide
  2. 了解Cloud SQL federated queries如何让您从BigQuery云SQL实例中进行查询。

通过这种方式可以实时访问关系数据库,如下所示:

您在BigQuery上运行的示例查询:

代码语言:javascript
复制
SELECT * EXTERNAL_QUERY(
'connection_id',
'''SELECT * FROM mysqltable AS c ORDER BY c.customer_id'');

您甚至可以将Bigquery表与SQL表连接起来:

示例:

代码语言:javascript
复制
SELECT c.customer_id, c.name, SUM(t.amount) AS total_revenue,
rq.first_order_date
FROM customers AS c
INNER JOIN transaction_fact AS t ON c.customer_id = t.customer_id
LEFT OUTER JOIN EXTERNAL_QUERY(
  'connection_id',
  '''SELECT customer_id, MIN(order_date) AS first_order_date
  FROM orders
  GROUP BY customer_id''') AS rq ON rq.customer_id = c.customer_id
GROUP BY c.customer_id, c.name, rq.first_order_date;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58093678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档