美文网首页
Hive是如何保证表字段的顺序的

Hive是如何保证表字段的顺序的

作者: BIGrey | 来源:发表于2019-03-08 19:25 被阅读0次

通过看代码会发现,在获取所有字段的时候,都是调用table.getCols()方法,返回的是一个List<FieldSchema>,也就是说从Metastore获取的时候,这个List已经按照定义的顺序排列好了顺序。

然后转到Metastore的代码,一直追溯源头到jdo的query,都找不到最这个List做排序的地方。那也只能是jdo在底层做了什么事情。

一开始也没有什么线索,光靠一些自找的关键词来搜索jdo相关的文章,都没有找到。

最后是查看了一下MySQL中存储字段的那个表的定义:

CREATE TABLE `COLUMNS_V2` (
  `CD_ID` bigint(20) NOT NULL,
  `COMMENT` varchar(256) CHARACTER SET utf8 DEFAULT NULL,
  `COLUMN_NAME` varchar(128) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
  `TYPE_NAME` varchar(4000) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
  `INTEGER_IDX` int(11) NOT NULL,
  PRIMARY KEY (`CD_ID`,`COLUMN_NAME`),
  KEY `COLUMNS_V2_N49` (`CD_ID`),
  CONSTRAINT `COLUMNS_V2_FK1` FOREIGN KEY (`CD_ID`) REFERENCES `CDS` (`CD_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

里面有一个INTEGER_IDX字段,猜想这个应该就是jdo自动生成的东西了。查了一下资料果然如此,事情的真相是这样的:

在使用jdo时,如果你定义Model的时候使用了List类型的字段(比如这里的List<FieldSchema>),datanucleus在构造MySQL表的时候,会自动生成一个索引字段INTEGER_IDX(在datanucleus2中是IDX)从0开始递增,然后在查询的时候自动会在查询语句中加入ORDER BY INTEGER_IDX,这样就保证了顺序了。

具体可以参考一下这个的说明Hive-11039

相关文章

  • Hive是如何保证表字段的顺序的

    通过看代码会发现,在获取所有字段的时候,都是调用table.getCols()方法,返回的是一个List

  • Spark SQL写入Hive,同分区overwrite,不同分

    摘要:Spark SQL,Hive 新建hive表 新建hive表,定义好字段类型和分区字段 Spark SQL调...

  • Spark报错:java.io.notserializablee

    个人场景: 在遍历hive表数据时通过某个字段去获取hbase中特定字段的值,结合hive表中的一些字段再整合为一...

  • java 读取hive报错java.lang.Byte cann

    spark Core 读hive 表数据 遇到 的问题: 当hive 的字段类型为 tinyint 时, 报错: ...

  • Hive 修改表字段类型

    1.Hive 表修改字段类型 Alter table 表名 change column 原字段名称 现字段名称 数...

  • HIVE之添加和修改表字段

    Hive的表添加和修改表字段,通过使用关键字alter和change等个关键字。 添加HIVE表字段语法:alte...

  • Apache Kylin增量构建

    前提条件: 事实表中必须有一个时间类型的字段。这个时间字段最好是Hive表的分区字段。 构建设置 Model层面的...

  • 坑合集

    Flume flume细节 Hive 数据倾斜Hive优化 Hive分区表新增字段为null的bug及解决方法 S...

  • SQL语法纠正

    执行顺序①from查询表②join关联表③on字段条件④where字段条件⑤group by分组字段⑥having...

  • 分区关联时间

    Hive分区表分区字段是日期是比较常见的情形,而在实际查询时,使用分区字段作为条件查询某分区,关联的字段可...

网友评论

      本文标题:Hive是如何保证表字段的顺序的

      本文链接:https://www.haomeiwen.com/subject/tnsdpqtx.html