amazon-athena - 雅典娜跳过以下划线开头的键
问题描述
我正在尝试与 aws athena 一起对我们存储在 s3 中的 json 文件进行一些查询。所以,我设法创建了一个简单的模式,一切似乎都很好,直到我注意到我的一些文件没有被考虑在内。
文件的键是用户 ID,其中一些以 _ 开头。所有这些都在雅典娜中丢失。它们存在于 s3 中。我可以得到它们。它们与其他文件类似。但雅典娜没有看到他们。
显然它不喜欢键开头的下划线。除了重命名所有文件之外,还有其他方法吗?键中其他地方的下划线似乎不是问题。
我的架构(我通过删除字段来简化它):
CREATE EXTERNAL TABLE IF NOT EXISTS db.table (
`user_id` string)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
) LOCATION 's3://xyz/myfiles/'
TBLPROPERTIES ('has_encrypted_data'='false');
解决方案
当您查询表时,Amazon Athena 在后台使用 Presto。Presto 会忽略以下划线下划线 _ 或从 presto 版本 0.60 开始的点开头的文件。这是 Hadoop MapReduce / Hive 的行为
https://prestodb.io/docs/current/release/release-0.60.html
请参阅presto 使用 org.apache.hadoop.hive.common.FileUtils.HIDDEN_FILES_PATH_FILTER 过滤隐藏文件的函数。由于该属性是从Hive派生的,因此同样适用于 Hive 表,它将忽略特定位置的文件。
推荐阅读
- android - 我正在尝试添加 png 图像,但它没有加载?
- android - Android RuntimeException:无法获取提供程序 com.squareup.picasso.PicassoProvider
- powerbi - 累计量度功率bi累计
- android - 如何使用 Flutter Attach 对 Flutter add-to-app 应用程序进行性能分析?
- r - 错误找不到函数“install_version”
- javascript - NPM v7 不安装对等依赖项
- c# - 应用低通和高通滤波器
- firebird - 火鸟和虚拟条件
- javascript - 回调函数和高阶函数有什么区别?
- anylogic - ped.getGroup().size() 奇怪的行为