amazon-athena - 如何跳过与 Athena 中的架构不匹配的文档?
问题描述
假设我有一个像这样的外部表:
CREATE EXTERNAL TABLE my.data (
`id` string,
`timestamp` string,
`profile` struct<
`name`: string,
`score`: int>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1',
'ignore.malformed.json' = 'true'
)
LOCATION 's3://my-bucket-of-data'
TBLPROPERTIES ('has_encrypted_data'='false');
我的一些文档无效profile.score
(字符串而不是整数)。
这会导致 Athena 中的查询失败:
"Status": { "State": "FAILED", "StateChangeReason": "HIVE_BAD_DATA: 解析字段 0 的字段值时出错:对于输入字符串:\"4099999.9999999995\"",
如何配置 Athena 以跳过不适合外部表架构的文档?
这里的问题是关于查找有问题的文件;这个问题是关于跳过它们。
解决方案
这是有关如何排除特定文件的示例
SELECT
*
FROM
"some_database"."some_table"
WHERE(
"$PATH" != 's3://path/to/a/file'
)
刚刚测试了这种方法
SELECT
COUNT(*)
FROM
"some_database"."some_table"
-- Result: 68491573
SELECT
COUNT(*)
FROM
"some_database"."some_table"
WHERE(
"$PATH" != 's3://path/to/a/file'
)
-- Result: 68041452
SELECT
COUNT(*)
FROM
"some_database"."some_table"
WHERE(
"$PATH" = 's3://path/to/a/file'
)
-- Result: 450121
总计:450121 + 68041452 = 68491573
推荐阅读
- azure - 如何删除 Azure 门户中除“默认目录”之外的所有目录?
- unix - 在 Unix 中剪切特定列并用分隔符折叠
- c++ - 动态分配的指向 C++ 中结构的指针数组
- python - 如何拍摄由 Python-tkinter 创建的正在运行的 GUI 窗口的快照并保存为图像文件(.jpeg/.png)?
- oracle - Oracle APEX 样式 APEX_ITEM 动态表单元素
- ios - 平滑打开 UIBezierPath
- node.js - 如何将 IBM API 身份验证添加到我的代码中?
- python - 包含具有可变形状的多维 numpy 数组的 numpy 数组
- amazon-web-services - CloudWatchAgent 自定义指标未与 SSM 参数存储一起添加
- java - Android 是如何在 GitHub 上搜索依赖的?