google-bigquery - Big-Query 中非空值的“错误双值”错误
问题描述
我有一个带有 LTV 列的 bigquery 表。列的类型是 STRING。我尝试使用 将此列转换为 FLOAT64 CAST(LTV AS FLOAT64)
,但出现“Bad double value: 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
并得到了那些结果。
当我将有问题的行保存为 CSV 文件,然后使用“自动检测方案”选项再次将其上传为表格时,LTV 列被解析为 FLOAT64。但是当我创建方案并指定 LTV 列类型为 STRING 时,上传失败(文件- 我希望文件保持相同的格式)。
运行file results.csv
返回“ASCII 文本”
用 Python 打印文件:
with open('results.csv') as f:
print(f)
“<_io.TextIOWrapper 名称='results.csv' 模式='r' 编码='UTF-8'>”
这可能是什么原因?
解决方案
这可能是什么原因?
可能发生的情况是您将标题行(来自最有可能的原始 CSV 文件)加载到 BigQuery 表中,因此您的代码无法处理该确切行
您可以运行下面的示例来重现该确切问题
#standardSQL
WITH t AS (SELECT 'LTV' AS LTV)
SELECT CAST(LTVAS FLOAT64)
FROM t
结果
错误:错误的双值:LTV
推荐阅读
- python - Pipenv 安装未将依赖项添加到 Pipfile.lock
- java - 为什么我的 Java 方法在不使用任何 Intent 的情况下重定向?
- java - Springboot中的组计数Aggeration
- mongodb - 使用猫鼬的 Atlas 文本搜索返回一个空数组
- reactjs - 如何在 React 的 map 函数中调用三元运算符内的函数?
- sql - 使用 Postgresql 添加月份和年份的 CTE
- javascript - try/catch - 多少递归调用?调用堆栈大小循环
- c++ - 重新定义 arm64 macOS 的符号
- tensorflow - tensorflow-gpu 耗时太长
- azure - 执行 terraform 脚本时找不到 Serverfarm