13.2、Flink Table API & SQL - Hive 之 读写Hive表

使用HiveCatalog和Flink到Hive的连接器,Flink可以读写Hive数据,作为Hive批处理引擎的替代。一定要按照说明在应用程序中包含正确的依赖项(见Flink Table API & SQL - Hive之hive概览)。

读表

假设Hive在其默认数据库中包含一个表,名为people,其中包含几行。

hive> show databases;
OK
default
Time taken: 0.841 seconds, Fetched: 1 row(s)

hive> show tables;
OK
Time taken: 0.087 seconds

hive> CREATE TABLE mytable(name string, value double);
OK
Time taken: 0.127 seconds

hive> SELECT * FROM mytable;
OK
Tom   4.72
John  8.0
Tom   24.2
Bob   3.14
Bob   4.72
Tom   34.9
Mary  4.79
Tiff  2.72
Bill  4.33
Mary  77.7
Time taken: 0.097 seconds, Fetched: 10 row(s)

准备好数据后,您就可以连接到Hive,连接到现有的Hive安装并开始查询(详见:Flink Table API & SQL - Catalogs(使用概览和样例))。

Flink SQL> show catalogs;
myhive
default_catalog

# ------ Set the current catalog to be 'myhive' catalog if you haven't set it in the yaml file ------

Flink SQL> use catalog myhive;

# ------ See all registered database in catalog 'mytable' ------

Flink SQL> show databases;
default

# ------ See the previously registered table 'mytable' ------

Flink SQL> show tables;
mytable

# ------ The table schema that Flink sees is the same that we created in Hive, two columns - name as string and value as double ------ 
Flink SQL> describe mytable;
root
 |-- name: name
 |-- type: STRING
 |-- name: value
 |-- type: DOUBLE


Flink SQL> SELECT * FROM mytable;

   name      value
__________ __________

    Tom      4.72
    John     8.0
    Tom      24.2
    Bob      3.14
    Bob      4.72
    Tom      34.9
    Mary     4.79
    Tiff     2.72
    Bill     4.33
    Mary     77.7

写表

类似地,可以使用INSERT into子句将数据写入hive。

Flink SQL> INSERT INTO mytable (name, value) VALUES ('Tom', 4.72);

局限性

下面是Hive连接器的主要限制列表。我们正在积极努力缩小这些差距。

  • INSERT OVERWRITE不支持
  • 写入分区表不支持
  • ACID表不支持
  • 分桶表不支持
  • 部分数据类型不支持,详见上篇文章(Flink Table API & SQL - Hive之hive概览)
  • 只测试部分表数据格式,有text、sqeuencefile、ORC和Parquet
  • 视图不支持

你可能感兴趣的:(Flink,Hive,大数据)