为啥从 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 条记录作为输出?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Presto 比 Spark SQL 快 [关闭]

如何从 Presto 中的日期获取月份名称

从 Presto 中的 JSON 列中选择特定值

从 Presto 中的变量生成间隔

避免 Presto 中的数据孤岛:从 Raptor 到 RaptorX 的旅程

从 Presto 中的 JSON 数组中提取值