当前位置:  开发笔记 > 编程语言 > 正文

将数据从MySQL迁移到BigQuery的最佳实践

如何解决《将数据从MySQL迁移到BigQuery的最佳实践》经验,为你挑选了1个好方法。

我尝试了几种csv格式(不同的转义字符,引号和其他设置)从MySQL导出数据并将其导入BigQuery,但我无法找到适用于所有情况的解决方案.

Google SQL需要以下代码才能从/导入/导出MySQL.虽然,Cloud SQL不是BigQuery,但它是一个很好的起点:

SELECT * INTO OUTFILE 'filename.csv' CHARACTER SET 'utf8' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '' FROM table

目前我使用以下命令将压缩的csv导入BigQuery: bq --nosync load -F "," --null_marker "NULL" --format=csv PROJECT:DATASET.tableName gs://bucket/data.csv.gz table_schema.json

一方面,bq-command不允许设置转义字符("由另一个转义",这似乎是一个定义良好的CSV格式).另一方面\",因为MySQL导出的转义字符会导致"NNull值,这也不起作用:

CSV table references column position 34, but line starting at position:0 contains only 34 columns. (error code: invalid)

所以我的问题是:如何在SQL中为MySQL编写一个(与表无关的)导出命令,这样生成的文件就可以加载到BigQuery中.应该使用哪个转义字符以及如何处理/设置空值?



1> Brian Mayer..:

我一直在运行同样的问题,这是我的解决方案:

从MySQL导出数据

首先,以这种方式从MySQL导出数据:

SELECT * INTO OUTFILE 'filename.csv' CHARACTER SET 'utf8' 
FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '' 
FROM table 

这实际上是一个tsv文件(制表符分隔值),但您可以将它们导入为csv思想.

导入大查询

这样您就可以使用以下参数将其导入大查询:

bq load --field_delimiter="\t" --null_marker="\N" --quote="" \
PROJECT:DATASET.tableName gs://bucket/data.csv.gz table_schema.json

笔记

    如果MySQL数据库中的任何字段包含制表符(\t),它将破坏您的列.为了防止您REPLACE(, '\t', ' ')在列上添加SQL函数,它将从制表符转换为空格.

    如果在大查询的Web界面中设置表模式,则无需在每次加载CSV时指定它.

我希望这适合你.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有