TsFile的Hive连接器

    • TsFile的Hive连接器使用手册
      • 什么是TsFile的Hive连接器
      • 系统环境要求
      • 数据类型对应关系
      • 为Hive添加依赖jar包
      • 创建Tsfile-backed的Hive表
      • 从Tsfile-backed的Hive表中查询
        • 选择查询语句示例
      • 后续工作

    什么是TsFile的Hive连接器

    有了这个连接器,用户可以

    • 将单个Tsfile文件加载进Hive,不论文件是存储在本地文件系统或者是HDFS中
    • 将某个特定目录下的所有文件加载进Hive,不论文件是存储在本地文件系统或者是HDFS中
    • 使用HQL查询tsfile
    • 到现在为止, 写操作在hive-connector中还没有被支持. 所以, HQL中的insert操作是不被允许的

    数据类型对应关系

    TsFile 数据类型Hive 数据类型
    BOOLEANBoolean
    INT32INT
    INT64BIGINT
    FLOATFloat
    DOUBLEDouble
    TEXTSTRING

    为了在Hive中使用Tsfile的hive连接器,我们需要把hive连接器的jar导入进hive。

    https://github.com/apache/iotdb (opens new window)下载完iotdb后, 你可以使用 mvn clean package -pl hive-connector -am -Dmaven.test.skip=true命令得到一个 hive-connector-X.X.X-SNAPSHOT-jar-with-dependencies.jar

    然后在hive的命令行中,使用add jar XXX命令添加依赖。例如:

    创建Tsfile-backed的Hive表

    同时要提供一个只包含两个字段的Schema,这两个字段分别是time_stampsensor_idtime_stamp代表的是时间序列的时间值,sensor_id是你想要从tsfile文件中提取出来分析的传感器名称,比如说。 表的名字可以是hive所支持的任何表名。

    需要提供一个路径供hive-connector从其中拉取最新的数据。

    这个路径必须是一个指定的文件夹,这个文件夹可以在你的本地文件系统上,也可以在HDFS上,如果你启动了Hadoop的话。 如果是本地文件系统,要以这样的形式file:///data/data/sequence/root.baic2.WWS.leftfrontdoor/

    最后需要在TBLPROPERTIES里指明device_id

    例如:

    1. CREATE EXTERNAL TABLE IF NOT EXISTS only_sensor_1(
    2. time_stamp TIMESTAMP,
    3. sensor_1 BIGINT)
    4. ROW FORMAT SERDE 'org.apache.iotdb.hive.TsFileSerDe'
    5. STORED AS
    6. INPUTFORMAT 'org.apache.iotdb.hive.TSFHiveInputFormat'
    7. OUTPUTFORMAT 'org.apache.iotdb.hive.TSFHiveOutputFormat'
    8. LOCATION '/data/data/sequence/root.baic2.WWS.leftfrontdoor/'
    9. TBLPROPERTIES ('device_id'='root.baic2.WWS.leftfrontdoor.plc1');

    到目前为止, Tsfile-backed的表已经可以像hive中其他表一样被操作了。

    在做任何查询之前,我们需要通过如下命令,在hive中设置hive.input.format

    1. hive> set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;

    现在,我们已经在hive中有了一个名为only_sensor_1的外部表。 我们可以使用HQL做任何查询来分析其中的数据。

    例如:

    聚合查询语句示例

    1. hive> select count(*) from only_sensor_1;
    2. Query ID = jackietien_20191016202416_d1e3e233-d367-4453-b39a-2aac9327a3b6
    3. Launching Job 1 out of 1
    4. Number of reduce tasks determined at compile time: 1
    5. In order to change the average load for a reducer (in bytes):
    6. set hive.exec.reducers.bytes.per.reducer=<number>
    7. In order to limit the maximum number of reducers:
    8. set hive.exec.reducers.max=<number>
    9. In order to set a constant number of reducers:
    10. set mapreduce.job.reduces=<number>
    11. Job running in-process (local Hadoop)
    12. 2019-10-16 20:24:18,305 Stage-1 map = 0%, reduce = 0%
    13. 2019-10-16 20:24:27,443 Stage-1 map = 100%, reduce = 100%
    14. Ended Job = job_local867757288_0002
    15. MapReduce Jobs Launched:
    16. Stage-Stage-1: HDFS Read: 0 HDFS Write: 0 SUCCESS
    17. Total MapReduce CPU Time Spent: 0 msec
    18. OK
    19. Time taken: 11.334 seconds, Fetched: 1 row(s)

    后续工作

    我们现在仅支持查询操作,写操作的支持还在开发中…