【问题标题】:Loading data to Big Query from Local Database将数据从本地数据库加载到 Big Query
【发布时间】:2020-01-25 08:49:26
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

    标签: mysql google-cloud-platform google-bigquery


    【解决方案1】:

    为了实现这一点,您需要创建一个运行的 Cloud Storage 存储分区 gsutil mb gs://BUCKET_NAME.

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

    你可以关注这个示例函数

    '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 中看到上传的数据。

    【讨论】:

    • 嗨,谢谢。我想我会试一试,因为看起来我可以将它用于其他形式的数据,而不仅仅是 MySQL,这真的很有帮助。谢谢,我会试一试,可能会回来问更多问题哈哈
    【解决方案2】:

    由于新的 EXTERNAL_QUERY 已启动,您可以从 BigQuery 查询 Cloud SQL 实例,您现在最好的方法是:

    1. 将当前实例的副本设置为 Cloud SQL 实例,请遵循此guide
    2. 了解Cloud SQL federated queries 如何让您从 BigQuery Cloud SQL 实例中进行查询。

    您可以通过这种方式实时访问您的关系数据库:

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

    SELECT * EXTERNAL_QUERY(
    'connection_id',
    '''SELECT * FROM mysqltable AS c ORDER BY c.customer_id'');
    

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

    例子:

    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;
    

    【讨论】:

    • 谢谢。看起来这可能是我想做的最干净的方式,因为将来,本地数据库可能无论如何都会托管在云中。我会试试看的!
    猜你喜欢
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多