使用 bq load 加载带有 NULL 列的 CSV
Posted
技术标签:
【中文标题】使用 bq load 加载带有 NULL 列的 CSV【英文标题】:Loading CSV with NULLs columns using bq load 【发布时间】:2015-01-03 16:36:14 【问题描述】:我正在尝试使用 bq 工具将在 mysql(使用 outfile)中生成的 CSV 文件(实际上是 TSV)上传到 Bigquery。该表具有以下架构:
这里是示例数据文件:
"6.02" "0000" "101" \N "Md Fiesta Chicken|1|6.69|M|300212|100|100^M Sourdough|1|0|M|51301|112|112" "6.5" \N "V03" "24270310376" "10/17/2014 3:34 PM" "6.02" "30103" "452" "302998" "2014-12-08 10:57:15" \N
这就是我尝试使用 bq CLI 工具上传它的方式:
$ bq load -F '\t' --quote '"' --allow_jagged_rows receipt_archive.receipts /tmp/rec.csv
BigQuery error in load operation: Error processing job
'circular-gist-812:bqjob_r8d0bbc3192b065_0000014ab097c63c_1': Too many errors encountered. Limit is: 0.
Failure details:
- File: 0 / Line:1 / Field:16: Could not parse '\N' as a timestamp.
Required format is YYYY-MM-DD HH:MM[:SS[.SSSSSS]]
我认为问题在于 updated_at
列是 NULL
并因此被跳过。那么知道如何告诉它考虑空/空列吗?
【问题讨论】:
不是“跳过”;它被拒绝了。 @Strawberry:代表不代表编程专业! 与***.com/q/13050296/560648 非常相似(可能足以称其为骗子);这看起来像是导出和输入工具之间的格式差异(\N
不是“标准”CSV)
@Strawberry 你是什么意思? “应付账款不太可能是浮动的”为什么不能浮动?它的应付金额。如果不是浮点数,它会是什么数据类型?
十进制。人们可能会对那些微不足道的小部分非常感兴趣!
【参考方案1】:
CuriousMind - 这不是答案。只是使用浮点数而不是小数的问题的一个例子......
CREATE TABLE fd (f FLOAT(5,2),d DECIMAL(5,2));
INSERT INTO fd VALUES (100.30,100.30),(100.70,100.70;
SELECT * FROM fd;
+--------+--------+
| f | d |
+--------+--------+
| 100.30 | 100.30 |
| 100.70 | 100.70 |
+--------+--------+
SELECT f/3+f/3+f/3,d/3+d/3+d/3 FROM fd;
+-------------+-------------+
| f/3+f/3+f/3 | d/3+d/3+d/3 |
+-------------+-------------+
| 100.300003 | 100.300000 |
| 100.699997 | 100.700000 |
+-------------+-------------+
SELECT (f/3)*3,(d/3)*3 FROM fd;
+------------+------------+
| (f/3)*3 | (d/3)*3 |
+------------+------------+
| 100.300003 | 100.300000 |
| 100.699997 | 100.700000 |
+------------+------------+
但我听到你问为什么这是个问题?
好吧,考虑以下...
SELECT * FROM fd WHERE f <= 100.699997;
+--------+--------+
| f | d |
+--------+--------+
| 100.30 | 100.30 |
| 100.70 | 100.70 |
+--------+--------+
...现在肯定不是在处理金钱时所期望的吗?
【讨论】:
对,除了大查询不支持小数。从this list 可以看出,没有十进制数据类型。只有整数和浮点数。有意义吗? 我没有意识到 [gulps]。但这有关系吗? bq遇到mysql的十进制数据类型怎么办? “当 bq 遇到 mysql 的十进制数据类型时会发生什么” - 这应该不是问题,因为当存储为浮点数或十进制时,6.7
是 6.7
。我们只需要在对它们进行算术运算时小心。【参考方案2】:
要在 CSV 文件中指定“null”,请省略该字段的所有数据。 (看起来您正在使用未指定的转义语法“\N”。)
例如:
$ echo 2, > rows.csv
$ bq load tmp.test rows.csv a:integer,b:integer
$ bq head tmp.test
+---+------+
| a | b |
+---+------+
| 2 | NULL |
+---+------+
【讨论】:
以上是关于使用 bq load 加载带有 NULL 列的 CSV的主要内容,如果未能解决你的问题,请参考以下文章
Bigquery - 在一列中加载带有“#N/A”的 CSV