大查询中非空值的“错误的双值”错误

时间:2019-02-03 09:27:27

标签: google-bigquery

我有一个带有LTV列的bigquery表。列的类型为STRING。 我尝试使用CAST(LTV AS FLOAT64)将此列强制转换为FLOAT64,但是出现“错误的双精度值:LTV”错误(bigquery标准)。我查看了导致错误的特定行(对于很多行来说,它工作得很好),并且我看到值是'51 .0',看起来很合法。我运行此查询:

SELECT LTV, LENGTH(LTV) AS len_ltv, SAFE_CAST(LTV AS FLOAT64) AS ltv_safe_cast, CASE WHEN LTV = '51.0' THEN 'eq' ELSE 'neq' END AS eq_str, CAST(SAFE_CAST(LTV AS FLOAT64) AS STRING) AS ltv_double_cast, CAST(SAFE_CAST(LTV AS FLOAT64) AS STRING) = LTV AS ltv_double_cast_eq_str FROM mytable

并得到了results

当我将 problematic 行保存为CSV文件,然后使用“自动检测方案”选项再次将其上传为表格时,LTV列将解析为FLOAT64。但是当我创建方案并指定LTV列类型为STRING时,上传失败(file-我希望文件保留在相同的孔中)。

运行file results.csv返回“ ASCII文本”

使用Python打印文件:

with open('results.csv') as f: print(f)

“ <_ io.TextIOWrapper名称='results.csv'模式='r'编码='UTF-8'>”

这可能是什么原因?

1 个答案:

答案 0 :(得分:1)

  

这可能是什么原因?

可能发生的是,您已将标题行(很可能是原始CSV文件中的标题)加载到BigQuery表中,因此您的代码无法处理该确切行

您可以运行以下示例来重现该确切问题

#standardSQL
WITH t AS (SELECT 'LTV' AS LTV)
SELECT CAST(LTVAS FLOAT64)
FROM t

有结果

  

错误:错误的双精度值:LTV