为啥从 Presto 中的 dtap:// hive 表读取时总是得到 0 条记录作为输出?
Posted
技术标签:
【中文标题】为啥从 Presto 中的 dtap:// hive 表读取时总是得到 0 条记录作为输出?【英文标题】:Why do I always get 0 records as output while reading from dtap:// hive table in Presto?为什么从 Presto 中的 dtap:// hive 表读取时总是得到 0 条记录作为输出? 【发布时间】:2020-01-25 17:30:18 【问题描述】:我正在尝试在 CDH 5.14.2 上使用 Hive(以下所有版本详细信息)运行 Presto 令人惊讶的是,当我在任何表上运行任何选择查询时,我得到 0 条记录作为输出。当我在任何表上选择 * 时,我只得到所有字段的列表,再次没有数据。 所有表都是外部配置单元表,数据采用 parquet 格式
Hive 1.1.0
Presto 0.223,也是 0.219
检查 Presto 安装中的 server.log 文件,那里没有 ERROR 或 WARN 消息
还尝试使用 Presto 0.219 进行相同的安装,相同的情况
presto:sample_db> select count(*) from tableName;
_col0
-------
0
(1 row)
Query 20190925_125900_00005_8tzp2, FINISHED, 1 node
Splits: 18 total, 18 done (100.00%)
0:01 [0 rows, 0B] [0 rows/s, 0B/s]
DESCRIBE FORMATTED 表名的输出 --
# col_name data_type comment
column1 string
column2 string
column3 string
column4 decimal(6,0)
column5 timestamp
# Partition Information
# col_name data_type comment
active string
# Detailed Table Information
Database: db_name
Owner: cloudera-vivek
CreateTime: Sun Nov 25 03:23:06 GMT 2018
LastAccessTime: UNKNOWN
Protect Mode: None
Retention: 0
Location: dtap://dbname/tablename
Table Type: EXTERNAL_TABLE
Table Parameters:
EXTERNAL TRUE
STATS_GENERATED_VIA_STATS_TASK true
numPartitions 2
numRows 4142
transient_lastDdlTime 1543116186
# Storage Information
SerDe Library: org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe
InputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat
OutputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat
Compressed: No
Num Buckets: -1
Bucket Columns: []
Sort Columns: []
Storage Desc Params:
serialization.format 1
Time taken: 0.919 seconds, Fetched: 40 row(s)
这可能是因为 Hive 和 Presto 之间的某些版本不匹配吗?我在 Presto 发行说明中找不到类似的内容 安装时需要添加其他任何 .jar 或配置文件吗?
非常感谢您的帮助
【问题讨论】:
检查字段分隔符和行终止符,它们应该在create table
中指定
我检查了SHOW CREATE TABLE <tablename>
和DESCRIBE EXTENDED <tablename>
,它没有在任何地方显示 field.delim。我假设在创建表时未指定 由 终止的行格式分隔字段(因为它不是由我创建的)
【参考方案1】:
你能试试这里提到的 msck repair table table-name:https://github.com/prestodb/presto/issues/4109 吗?
【讨论】:
感谢您的评论,鲁帕姆。我试过 MSCK REPAIR TABLE db_name.table_name;没用 您能分享一下 Hive 中“DESCRIBE FORMATTED table”的输出吗?另外,如果你在 Hive 中执行“select * from table”,你能看到正确的输出吗? 我已经在上面提出的问题中更新了这一点。请注意,数据是通过 dtap (bluedata.zendesk.com/hc/en-us/articles/…) 访问的,而不是直接从 HDFS 访问 你还能在 Hive 中分享“SHOW PARTITIONS tablename”吗? 可能你需要运行“ALTER TABLE tablename RECOVER PARTITIONS”以上是关于为啥从 Presto 中的 dtap:// hive 表读取时总是得到 0 条记录作为输出?的主要内容,如果未能解决你的问题,请参考以下文章