NaN*_*NaN 12 mysql csv google-bigquery
我尝试了几种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
Run Code Online (Sandbox Code Playgroud)
目前我使用以下命令将压缩的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中.应该使用哪个转义字符以及如何处理/设置空值?
我一直在运行同样的问题,这是我的解决方案:
首先,以这种方式从MySQL导出数据:
SELECT * INTO OUTFILE 'filename.csv' CHARACTER SET 'utf8'
FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY ''
FROM table <yourtable>
Run Code Online (Sandbox Code Playgroud)
这实际上是一个tsv文件(制表符分隔值),但您可以将它们导入为csv思想.
这样您就可以使用以下参数将其导入大查询:
bq load --field_delimiter="\t" --null_marker="\N" --quote="" \
PROJECT:DATASET.tableName gs://bucket/data.csv.gz table_schema.json
Run Code Online (Sandbox Code Playgroud)
如果MySQL数据库中的任何字段包含制表符(\t),它将破坏您的列.为了防止您REPLACE(<column>, '\t', ' ')在列上添加SQL函数,它将从制表符转换为空格.
如果在大查询的Web界面中设置表模式,则无需在每次加载CSV时指定它.
我希望这适合你.
2019 年更新:
试试这个作为替代方案:
更长的操作方法:
您可以使用mysql2xxxx等工具在导出时获得最大的灵活性。
您可以mysql2csv运行任意查询,并且输出过程利用FasterCSV,这将为您提供比普通 mysql 更多的选择。
| 归档时间: |
|
| 查看次数: |
5300 次 |
| 最近记录: |