当我使用show create table mydb.mytable显示的命令重新创建星火中的表时,就不能使用Hive中的表了。这种情况只发生在几个表中,我重新创建的其他表仍然可以从hive访问。
我在星火表中添加注释元数据。我是通过重新创建一张装好的桌子来做的。我首先获得spark命令来创建一个表:
spark.sql('show create table mydb.mytable')它将返回一个create命令,如下所示:
"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中看不到模式的表有什么不同。
如何解决这几个表的问题?
发布于 2022-05-10 20:53:39
问题是有些表格的评论太大了。任何具有注释超过1000个字节的列的表都可以在Spark中工作,但是当从Hive访问时有一个损坏的模式。
我用更多1000个字节截断了注释,一切都很好。
请注意,此限制相对于字符串中的字节数。因此,如果在注释中使用UTF-8编码字符串,则任何重音字符将至少使用2个字节。
这个限制不适用于表注释,只适用于列。
我仍然不知道评论的大小是在哪里配置的。在我的开发环境中,一切都很好,但是在生产中失败了。
顺便说一句,在我的Spark版本中,show create table命令不显示注释。
https://stackoverflow.com/questions/72175025
复制相似问题