【问题标题】:hive is not returning values from external table in ORC formathive 没有以 ORC 格式从外部表返回值
【发布时间】:2020-08-28 17:48:34
【问题描述】:

我正在尝试从 Hive 上的外部表中检索数据。我正在使用基于 Cloudera/quickstart 映像的 docker 容器来执行此操作,该映像是 Cloudera 的官方映像。

桌子:

create external table dev.tru_sprinklr_rpt_platform_inbound_case (
universal_message_id    STRING  COMMENT 'Id unico na mensagem', 
inbound_message_date    STRING  COMMENT 'Data no formato Unix Timestamp', 
message                 STRING  COMMENT 'Mensagem escrita na Rede Social', 
permalink               STRING  COMMENT 'URL que aponta para uma postagem específica na Rede Social', 
social_network          STRING  COMMENT 'Nome da Rede Social', 
associated_cases        STRING  COMMENT 'Id de mensagens associados ao caso (gerado automaticamente pela Sprinklr no periodo de 24 horas)',
from_user               STRING  COMMENT 'Usuario', 
sentiment               STRING  COMMENT 'Sentimento', 
assunto_gestor          STRING  COMMENT 'Categoria gerada na plataforma Sprinklr pelos atendentes de midia sociais com assunto do caso', 
detalhamento            STRING  COMMENT 'Categoria gerada na plataforma Sprinklr pelos atendentes de midia sociais com detalhamento do caso', 
motivo_engajamento      STRING  COMMENT 'Categoria gerada na plataforma Sprinklr pelos atendentes de midia sociais com motivo e engajamento do caso', 
has_brand_responded     STRING  COMMENT 'Mensagem teve uma resposta', 
sender_id               STRING  COMMENT 'Id do usuario que esta enviando a mensagem', 
sender_name             STRING  COMMENT 'Login do usuario que esta enviando a mensagem', 
sender_screenname       STRING  COMMENT 'Nome do usuario que esta enviando a mensagem', 
sender_location         STRING  COMMENT 'Localizacao do usuario que esta enviando a mensagem',
sender_url_profile      STRING  COMMENT 'URL do perfil do usuario que esta enviando a mensagem', 
sender_following        STRING  COMMENT 'Quantidade de seguintes do usuario que esta enviando a mensagem', 
sender_followers        STRING  COMMENT 'Quantidade de seguidores do usuario que esta enviando a mensagem', 
receiver_id             STRING  COMMENT 'Id do usuario que esta recebendo a mensagem', 
receiver_name           STRING  COMMENT 'Nome do usuario que esta recebendo a mensagem'
) stored as orc
location '/user/next/dev/sprinklr/external'
tblproperties ("orc.compress"="ZLIB");

Hive 版本:Hive 1.1.0-cdh5.7.0

我正在使用 Spark 1.6(因为我正在与之合作的公司)将 orc 文件写入“位置”。该文件在那里并且具有正确的内容。我知道,因为我可以使用 Spark 读取 Dataframe 上的内容。

但是,当我使用简单查询(SELECT * FROM)时,结果是这样的:

$ hive -e "select * from dev.tru_sprinklr_rpt_platform_inbound_case"
2020-05-12 18:13:10,235 WARN  [main] mapreduce.TableMapReduceUtil: The hbase-prefix-tree 
module jar containing PrefixTreeCodec is not present.  Continuing without it.

Logging initialized using configuration in file:/etc/hive/conf.dist/hive-log4j.properties
OK
Time taken: 1.134 seconds
WARN: The method class org.apache.commons.logging.impl.SLF4JLogFactory#release() was invoked.
WARN: Please see http://www.slf4j.org/codes.html#release for an explanation

如您所见,即使在 HDFS 的正确路径中使用 orc 文件(实际上是目录),也没有返回任何内容。

我尝试使用此命令,希望只是 Hive 需要更新元数据: MSCK 修复表 dev.tru_sprinklr_rpt_platform_inbound_case

但什么都没有改变!

我试图在创建表之前包含这一行,但是也没有任何改变! 添加 JAR /jars/hive-orc-2.2.0.jar;

我读过类似的问题,但没有任何回答者适合我。

有什么建议吗?

谢谢!

【问题讨论】:

    标签: hive zlib orc external-tables


    【解决方案1】:

    您的查询看起来很好读数据,但可能是由于错误的列顺序或错误的数据类型,您的数据没有读取数据并且空白即将到来。

    我也遇到过类似的问题,那是因为列顺序错误。很奇怪,因为ORC incorporate schema details

    【讨论】:

    • 我再次使用命令hive --orcfiledump -d /user/next/dev/sprinklr/external/sprinklr-FUMwM2tzTb.orc/part-r-00000-a5086502-4548-4469-8741-5c6b505e4e61.orc 与命令show create table 的结果进行了比较。它们在列顺序和数据类型方面是相同的(所有字段都是字符串类型)
    • 我将表格修改为只有一列(universal_message_id)。结果一样! Hive 无法识别 ORC 文件内容。
    • @AndreCarneiro 在TABLE CREATE 命令中将/user/next/dev/sprinklr/external/sprinklr-FUMwM2tzTb.orc/ 指定为LOCATION
    • 你完全正确!这个我也想通了!我完全忘记了 spark 保存一个包含部分而不是文件的目录,除非你使用合并,这是我不想要的。还是谢谢!
    【解决方案2】:

    这通常是数据文件错误,可能是文件的格式不正确,或者某些字段的格式不正确,或者更好的说法是表结构和数据之间存在差异或不一致。请尝试检查数据文件,Hive 中有一个实用程序可以检查 orc 文件。

    作为一个例子,你可以看到这个链接:

    On HDFS, I want to display normal text for a hive table stored in ORC format

    还有 Hive 文档:

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC#LanguageManualORC-ORCFileDumpUtility

    【讨论】:

    • 我用过你建议的工具。我没有看到表和 orc 文件之间没有什么不同,包括列名、顺序和类型。我将表格修改为只有一列(universal_message_id)。结果一样! Hive 无法识别 ORC 文件内容。
    • 是的!这很奇怪,因为我正在使用 cloudera quickstart vm 并且 orc 文件运行良好。我不知道发生了什么。
    • 找到问题了! Spark 正在保存一个包含部分文件的目录。我忘了这个!
    猜你喜欢
    • 2020-10-03
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2023-03-31
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多