Spark 重新创建我的 orc 存储表后,Hive 无法访问表

Hive can't access tables after Spark recreates my orc stored tables

当我使用 show create table mydb.mytable 中显示的命令在 spark 中重新创建 table 时,我不再能够使用 Hive 中的 table。这只发生了几个 tables,我重新创建的其他 tables 仍然可以从 hive 访问。

我正在将评论元数据添加到我的 spark tables。我通过重新创建一个加载的 table 来做到这一点。我首先得到 spark 命令来创建一个 table:

spark.sql('show create table mydb.mytable')

它将 return 创建一个 table 命令,例如:

"CREATE TABLE `raw_db`.`mytable` (`municipio` STRING )
USING orc
OPTIONS (`serialization.format` '1',
         'hdfs://xxxx/corporativo/raw_db/mytable')"

我解析了 returned SQL 并在其中插入了注释,但是当我重新创建它时,spark 仍然可以正确地看到 table,但是它在 Hive 中失败了。这是当我 运行 命令 describe raw_db.mytable:

时 Hive 显示的内容
    col_name    data_type   comment
    col     array<string>   from deserializer

这是重新创建失败的 table 的完整架构:

CREATE TABLE `sbx_ppppp`.`mytable` (
  `id_conct_cdstrl` DECIMAL(19,0), 
  `dt_cria` TIMESTAMP, 
  `id_usu_cria` STRING, 
  `dt_ult_atualz` TIMESTAMP, 
  `id_usu_ult_atualz` STRING, 
  `nu_vrs` DECIMAL(19,0), 
  `dt_ini_vignc` TIMESTAMP, 
  `dt_fim_vignc` TIMESTAMP, 
  `nu_dia_prz_vignc` DECIMAL(4,0), 
  `in_escp_cnslt_altrd` STRING, 
  `id_fnt_conct_cdstrl` DECIMAL(2,0), 
  `id_avalc_conct_cdstrl_dlibr` DECIMAL(2,0), 
  `id_avalc_conct_cdstrl_autmtc` DECIMAL(2,0), 
  `id_avalc_conct_cdstrl_prop` DECIMAL(2,0), 
  `nu_rlat` DECIMAL(19,0), 
  `id_sit_conct_cdstrl` DECIMAL(2,0), 
  `id_solic_anls_conct_cdstrl` DECIMAL(19,0), 
  `id_anlst_rspvl` DECIMAL(19,0), 
  `id_grnt_rspvl` DECIMAL(19,0), 
  `id_doc_lst` DECIMAL(19,0), 
  `id_dlibr` DECIMAL(19,0), 
  `id_pondrc_escp` DECIMAL(2,0), 
  `qt_entdd_nao_escp` DECIMAL(6,0), 
  `vl_pontc_calc_nao_escp` DECIMAL(9,0), 
  `ds_fnaldd` STRING, 
  `te_pre_anls_conct_cdstrl` STRING)
USING orc
OPTIONS (
  `serialization.format` '1',
  path 'hdfs://xxxx/corporativo/raw_db/mytable'
)

我没有注意到 table 和重新创建后无法从 Hive 看到架构的 table 有什么区别。

如何为这少数 table 解决这个问题?

问题是一些 table 的评论太大了。任何具有超过 1000 个字节的注释的列的任何 table 都可以在 Spark 中工作,但从 Hive 访问时会出现损坏的模式。

我将评论截断了 1000 个字节,一切正常。

请注意,此限制是相对于字符串中 字节 的数量而言的。因此,如果您在评论中使用 UTF-8 编码的字符串,任何带重音符号的字符将至少使用 2 个字节。

此限制不适用于 table 评论,仅适用于列。

我还是不知道评论的大小在哪里配置的。在我的开发环境中一切正常,但在生产环境中却失败了。

顺便说一句,在我的 Spark 版本中,show create table 命令不显示评论。