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



当我使用show create table mydb.mytable显示的命令在spark中重新创建表时,我无法使用Hive中的表。这只是发生在一些表上,我重新创建的其他表仍然可以从hive访问。

我正在添加注释元数据到我的spark表。我通过重新创建一个加载的表来实现。我首先使用spark命令创建一个表:

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

它将返回如下创建表命令:

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

我解析返回的SQL并在其中插入注释,但是当我重新创建它时,spark仍然可以正确地看到表,但它在Hive中失败。以下是我运行describe raw_db.mytable命令时Hive显示的内容:

col_name    data_type   comment
col     array<string>   from deserializer

下面是重建失败的表的完整模式:

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'
)

我没有注意到它工作的表和我在重新创建后无法从Hive中看到模式的表有任何区别。

如何解决这几个表的这个问题?

问题是有些表的注释太大。在Spark中,任何有超过1000字节注释的列的表都可以工作,但是当从Hive中访问时,模式就会被破坏。

我截断了1000字节以上的注释,一切都很好。

注意这个限制是相对于字符串中的字节数的。因此,如果您在注释中使用UTF-8编码的字符串,则任何重音字符将使用至少2个字节。

这个限制不适用于表注释,只适用于列。

我仍然不知道注释的大小是在哪里配置的。在我的开发环境中一切正常,但在生产环境中失败了。

顺便说一下,在我的Spark版本中,show create table命令不显示注释。

最新更新