`
501311837
  • 浏览: 17576 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hive

阅读更多

Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 QL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

 

    首先,Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。

    概述:

    1.CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常。

    2.EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。

    3.LIKE 允许用户复制现有的表结构,但是不复制数据。

    4.用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过 SerDe 确定表的具体的列的数据。

    5.如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCE 。

    6.有分区的表可以在创建的时候使用 PARTITIONED BY 语句。一个表可以拥有一个或者多个分区,每一个分区单独存在一个目录下。而且,表和分区都可以对某个列进行 CLUSTERED BY 操作,将若干个列放入一个桶(bucket)中。也可以利用SORT BY 对数据进行排序。这样可以为特定应用提高性能。 

   语法:

 

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
  [(col_name data_type [COMMENT col_comment], ...)]
  [COMMENT table_comment]
  [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
  [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
  [
   [ROW FORMAT row_format] [STORED AS file_format]
 STORED BY 'storage.handler.class.name' [ WITH SERDEPROPERTIES (...) ]  (Note:  only available starting with 0.6.0)
  ]
  [LOCATION hdfs_path]
  [TBLPROPERTIES (property_name=property_value, ...)]  (Note:  only available starting with 0.6.0)
  [AS select_statement]  (Note: this feature is only available starting with 0.5.0.)

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
  LIKE existing_table_name
  [LOCATION hdfs_path]

data_type
  : primitive_type
  | array_type
  | map_type
  | struct_type

primitive_type
  : TINYINT
  | SMALLINT
  | INT
  | BIGINT
  | BOOLEAN
  | FLOAT
  | DOUBLE
  | STRING

array_type
  : ARRAY < data_type >

map_type
  : MAP < primitive_type, data_type >

struct_type
  : STRUCT < col_name : data_type [COMMENT col_comment], ...>

row_format
  : DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char]
        [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
  | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

file_format:
  : SEQUENCEFILE
  | TEXTFILE
  | RCFILE     (Note:  only available starting with 0.6.0)
  | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname

 目前在hive中常用的数据类型有:

 

 

   BIGINT – 主要用于状态,类别,数量的字段, status/option/type/quantity

 

   DOUBLE – 主要用于金额的字段, fee/price/bid

 

   STRING – 除上述之外的字段基本都使用String, 尤其是id和日期时间这样的字段

 

    例子:

1、如果一个表已经存在,可以使用if not exists

2 create table htduan(id int,cont string) row format delimited fields terminated by ',' stored as textfile;

terminated by:关于来源的文本数据的字段间隔符

如果要将自定义间隔符的文件读入一个表,需要通过创建表的语句来指明输入文件间隔符,然后load data到这个表。

4Alibaba数据库常用间隔符的读取

我们的常用间隔符一般是Ascii5Ascii7等。在hiveAscii5’\005’表示, Ascii7’\007’表示,依此类推。

5、装载数据

查看一下:Hadoop fs -ls

LOAD DATA INPATH '/user/admin/htduan/a.txt' OVERWRITE INTO TABLE htduan;

6、如果使用external建表和普通建表区别

A、指定一个位置,而不使用默认的位置。如:

create  EXTERNAL  table htduan(id int,cont string) row format delimited fields terminated by '\005' stored as textfile location '/user/admin/htduan/';

--------------check结果

ij> select LOCATION from tbls a,sds b where a.sd_id=b.sd_id and tbl_name='htduan'; 

-----

LOCATION                                                                                                                        

--------------------------------------------------------------------------------------------------------------------------------

hdfs://hadoop1:7000/user/admin/htduan  

 

ij> select LOCATION from tbls a,sds b where a.sd_id=b.sd_id and tbl_name='c';

----

LOCATION                                                                                                                       

--------------------------------------------------------------------------------------------------------------------------------

hdfs://hadoop1:7000/user/hive/warehouse/c

B、对于使用create table external建表完成后,再drop掉表,表中的数据还在文件系统中。

如:

hive> create  EXTERNAL  table htduan(id int,cont string) row format delimited fields terminated by '\005' stored as textfile;

----

OK

 

hive> LOAD DATA INPATH '/user/admin/htduan' OVERWRITE INTO TABLE htduan;

--------------------------------------------------

Loading data to table htduan

OK

 

hive> drop table htduan;

----

OK

 

[admin@hadoop1 bin]$ ./hadoop fs -ls hdfs://hadoop1:7000/user/hive/warehouse/htduan

Found 1 items

 

使用普通的建表DROP后则找不到

 

    创建分区:

 

CREATE TABLE page_view(viewTime INT, userid BIGINT,
     page_url STRING, referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User')
 COMMENT 'This is the page view table'
 PARTITIONED BY(dt STRING, country STRING)
 CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS
 ROW FORMAT DELIMITED
   FIELDS TERMINATED BY '\001'
   COLLECTION ITEMS TERMINATED BY '\002'
   MAP KEYS TERMINATED BY '\003'
 STORED AS TEXTFILE;

 指定LOCATION位置

 

 

CREATE EXTERNAL TABLE page_view(viewTime INT, userid BIGINT,
     page_url STRING, referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User',
     country STRING COMMENT 'country of origination')
 COMMENT 'This is the staging page view table'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
 STORED AS TEXTFILE
 LOCATION '<hdfs_location>';

 复制一个空表(只复制它的表结构)

 

 

CREATE TABLE empty_key_value_store
LIKE key_value_store;

 增加partitions

 

 

ALTER TABLE table_name ADD [IF NOT EXISTS] partition_spec [ LOCATION 'location1' ] partition_spec [ LOCATION 'location2' ] ...

partition_spec:
  : PARTITION (partition_col = partition_col_value, partition_col = partiton_col_value, ...)
Eg:
ALTER TABLE c02_clickstat_fatdt1 ADD 
PARTITION (dt='20101202') location '/user/hive/warehouse/c02_clickstat_fatdt1/part20101202' 
PARTITION (dt='20101203') location '/user/hive/warehouse/c02_clickstat_fatdt1/part20101203';

 删除partitions

 

 

ALTER TABLE table_name DROP partition_spec, partition_spec,...

ALTER TABLE c02_clickstat_fatdt1 DROP PARTITION (dt='20101202');

 改表名

 

ALTER TABLE table_name RENAME TO new_table_name

 

这个命令可以让用户为表更名。数据所在的位置和分区名并不改变。

新增替换column

 

ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)

 create view

 

 

CREATE VIEW [IF NOT EXISTS] view_name [ (column_name [COMMENT column_comment], ...) ]
[COMMENT view_comment]
[TBLPROPERTIES (property_name = property_value, ...)] 
AS SELECT ...

 load数据

 

 

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

 

LOAD DATA LOCAL INPATH `/tmp/pv_2008-06-08_us.txt` INTO TABLE c02 PARTITION(date='2008-06-08', country='US')

 hdfs导入数据到表格并覆盖原表

 

LOAD DATA INPATH '/user/admin/SqlldrDat/CnClickstat/20101101/18/clickstat_gp_fatdt0/0' INTO table c02_clickstat_fatdt1 OVERWRITE PARTITION (dt='20101201');

 Writing data into filesystem from queries

 

 

FROM src

  INSERT OVERWRITE TABLE dest1 SELECT src.* WHERE src.key < 100

  INSERT OVERWRITE TABLE dest2 SELECT src.key, src.value WHERE src.key >= 100 and src.key < 200

  INSERT OVERWRITE TABLE dest3 PARTITION(ds='2008-04-08', hr='12') SELECT src.key WHERE src.key >= 200 and src.key < 300

  INSERT OVERWRITE LOCAL DIRECTORY '/tmp/dest4.out' SELECT src.value WHERE src.key >= 300;

from xi  
insert overwrite  table test2 select  '1,2,3' limit 1 
insert overwrite  table d select  '4,5,6' limit 1;

 TopK问题

下面的查询语句查询销售记录最大的 5 个销售代表。

SET mapred.reduce.tasks = 1
  SELECT * FROM sales SORT BY amount DESC LIMIT 5

 可以在HQL中使用SET关键字设定参数,例如:

set mapred.reduce.tasks=100;

 

hive复杂类型的操作

 

Constructor Function

Operands

Description

Map

(key1, value1, key2, value2, ...)

Creates a map with the given key/value pairs

Struct

(val1, val2, val3, ...)

Creates a struct with the given field values. Struct field names will be col1, col2, ...

Array

(val1, val2, ...)

Creates an array with the given elements

 

日期函数

 

返回值类型

名称

描述

string

from_unixtime(int unixtime)

将时间戳(unix epoch秒数)转换为日期时间字符串,例如from_unixtime(0)="1970-01-01 00:00:00"

bigint

unix_timestamp()

获得当前时间戳

bigint

unix_timestamp(string date)

获得date表示的时间戳

bigint

to_date(string timestamp)

返回日期字符串,例如to_date("1970-01-01 00:00:00") = "1970-01-01"

string

year(string date)

返回年,例如year("1970-01-01 00:00:00") = 1970year("1970-01-01") = 1970

int

month(string date)

 

int

day(string date) dayofmonth(date)

 

int

hour(string date)

 

int

minute(string date)

 

int

second(string date)

 

int

weekofyear(string date)

 

int

datediff(string enddate, string startdate)

返回enddatestartdate的天数的差,例如datediff('2009-03-01', '2009-02-27') = 2

int

date_add(string startdate, int days)

days天数到startdate: date_add('2008-12-31', 1) = '2009-01-01'

int

date_sub(string startdate, int days)

days天数到startdate: date_sub('2008-12-31', 1) = '2008-12-30'

字符串函数

返回值类型

名称 

描述

Int

length(string A)

返回字符串长度

String

reverse(string A)

反转字符串

String

concat(string A, string B...)

合并字符串,例如concat('foo', 'bar')='foobar'。注意这一函数可以接受任意个数的参数

String

substr(string A, int start) substring(string A, int start)

返回子串,例如substr('foobar', 4)='bar'

String

substr(string A, int start, int len) substring(string A, int start, int len)

返回限定长度的子串,例如substr('foobar', 4, 1)='b'

String

upper(string A) ucase(string A)

转换为大写

String

lower(string A) lcase(string A)

转换为小写

String

trim(string A)

 

String

ltrim(string A)

 

String

rtrim(string A)

 

String

regexp_replace(string A, string B, string C)

Returns the string resulting from replacing all substrings in B that match the Java regular expression syntax(See Java regular expressions syntax) with C e.g. regexp_replace("foobar", "oo|ar", "") returns 'fb.' Note that some care is necessary in using predefined character classes: using '\s' as the second argument will match the letter s; '\\s' is necessary to match whitespace, etc.

String

regexp_extract(string subject, string pattern, int intex)

返回使用正则表达式提取的子字串。例如,regexp_extract('foothebar', 'foo(.*?)(bar)', 2)='bar'。注意使用特殊字符的规则:使用'\s'代表的是字符's';空白字符需要使用'\\s',以此类推。

String

parse_url(string urlString, string partToExtract)

解析URL字符串,partToExtract的可选项有:HOST, PATH, QUERY, REF, PROTOCOL, FILE, AUTHORITY, USERINFO

例如,

parse_url('http://facebook.com/path/p1.php?query=1', 'HOST')='facebook.com'

parse_url('http://facebook.com/path/p1.php?query=1', 'PATH')='/path/p1.php'

parse_url('http://facebook.com/path/p1.php?query=1', 'QUERY')='query=1',可以指定key来返回特定参数,key的格式是QUERY:<KEY_NAME>,例如QUERY:k1

parse_url('http://facebook.com/path/p1.php?query=1&field=2','QUERY','query')='1'可以用来取出外部渲染参数key对应的value

parse_url('http://facebook.com/path/p1.php?query=1&field=2','QUERY','field')='2'

parse_url('http://facebook.com/path/p1.php?query=1#Ref', 'REF')='Ref'

parse_url('http://facebook.com/path/p1.php?query=1#Ref', 'PROTOCOL')='http'

String

get_json_object(string json_string, string path)

解析json字符串。若源json字符串非法则返回NULLpath参数支持JSONPath的一个子集,包括以下标记:

$: Root object

[]: Subscript operator for array

&: Wildcard for []

.: Child operator

String

space(int n)

返回一个包含n个空格的字符串

String

repeat(string str, int n)

重复str字符串n

String

ascii(string str)

返回str中第一个字符的ascii

String

lpad(string str, int len, string pad)

左端补齐str到长度为len。补齐的字符串由pad指定。

String

rpad(string str, int len, string pad)

右端补齐str到长度为len。补齐的字符串由pad指定。

Array

split(string str, string pat)

返回使用pat作为正则表达式分割str字符串的列表。例如,split('foobar', 'o')[2] = 'bar'。?不是很明白这个结果

Int

find_in_set(string str, string strList)

Returns the first occurance of str in strList where strList is a comma-delimited string. Returns null if either argument is null. Returns 0 if the first argument contains any commas. e.g. find_in_set('ab', 'abc,b,ab,c,def') returns 3

 

explode函数:

1、create table test2(mycol array<int>);
2、insert OVERWRITE table test2 select * from (select array(1,2,3) from a union all select array(7,8,9)  from d)c;
3、hive> select * from test2;
OK
[1,2,3]
[7,8,9]
3、	hive> SELECT explode(myCol) AS myNewCol FROM test2;
OK
1
2
3
7
8
9

 字符集:

HadoopHive都是用UTF-8编码的,所以所有中文必须是UTF-8编码才能正常使用

 

备注:中文数据load到表里面如果字符集不同,很有可能全是乱码需要做转码的但是hive本身没有函数来做这个

 

不支持HAVING操作。如果需要这个功能要嵌套一个子查询用where限制

Hive不支持where子句中的子查询

   

    优化:

1.数据量大不是问题,数据倾斜是个问题。 

2.jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产生十几个jobs,耗时很长。原因是map reduce作业初始化的时间是比较长的。

3.sum,count,max,min等UDAF,不怕数据倾斜问题,hadoop在map端的汇总合并优化,使数据倾斜不成问题。  

4.count(distinct ),在数据量大的情况下,效率较低,如果是多count(distinct )效率更低,因为count(distinct)是按group by 字段分组,按distinct字段排序,一般这种分布方式是很倾斜的,比如男uv,女uv,淘宝一天30亿的pv,如果按性别分组,分配2个reduce,每个reduce处理15亿数据。

 

    常用的优化手段

1.好的模型设计事半功倍。 

2.解决数据倾斜问题。 

3.减少job数。 

4.设置合理的map reduce的task数,能有效提升性能。(比如,10w+级别的计算,用160个reduce,那是相当的浪费,1个足够)。 

5.了解数据分布,自己动手解决数据倾斜问题是个不错的选择。set hive.groupby.skewindata=true;这是通用的算法优化,但算法优化有时不能适应特定业务背景,开发人员了解业务,了解数据,可以通过业务逻辑精确有效的解决数据倾斜问题。 

6.数据量较大的情况下,慎用count(distinct),count(distinct)容易产生倾斜问题。 

7.对小文件进行合并,是行至有效的提高调度效率的方法,假如所有的作业设置合理的文件数,对云梯的整体调度效率也会产生积极的正向影响。 

8.优化时把握整体,单个作业最优不如整体最优。

 

 临时添加UDF

 

hive> select * from test;   
OK
Hello
wORLD
ZXM
ljz
Time taken: 13.76 seconds
hive> add jar /home/work/udf.jar;                              
Added /home/work/udf.jar to class path
Added resource: /home/work/udf.jar
hive> create temporary function mytest as 'test.udf.ToLowerCase';
OK
Time taken: 0.103 seconds
hive> show functions;
......
mytest
......
hive> select mytest(test.name) from test;
......
OK
hello
world
zxm
ljz
Time taken: 38.218 seconds

 

 

 

分享到:
评论

相关推荐

    Hive3.1.2编译源码

    使用hive3.1.2和spark3.0.0配置hive on spark的时候,发现官方下载的hive3.1.2和spark3.0.0不兼容,hive3.1.2对应的版本是spark2.3.0,而spark3.0.0对应的hadoop版本是hadoop2.6或hadoop2.7。 所以,如果想要使用高...

    《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf

    《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第...

    hive

    hive hive hive hive hive hive hive hive hive hive hive hive

    hive-3.1.1安装包

    Hive是一个基于Hadoop的数据仓库工具,它本身并不存储数据,部署在Hadoop集群上,数据是存储在HDFS上的. Hive所建的表在HDFS上对应的是一个文件夹,表的内容对应的是一个文件。它不仅可以存储大量的数据而且可以对...

    hive学习总结 思维导图.xmind

    由于 Hive 采用了类似SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。本文将从多个方面来阐述 Hive ...

    利用Hive进行复杂用户行为大数据分析及优化案例

    利用Hive进行复杂用户行为大数据分析及优化案例(全套视频+课件+代码+讲义+工具软件),具体内容包括: 01_自动批量加载数据到hive 02_Hive表批量加载数据的脚本实现(一) 03_Hive表批量加载数据的脚本实现(二) ...

    HIVE-SQL开发规范.docx

    hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询...

    Hive使用手册Hive使用手册

    1 Hive 概念与连接使用: 2 2 Hive支持的数据类型: 2 2.1原子数据类型: 2 2.2复杂数据类型: 2 2.3 Hive类型转换: 3 3 Hive创建/删除数据库 3 3.1创建数据库: 3 3.2 删除数据库: 3 4 Hive 表相关语句 3 4.1 Hive ...

    Hive新手学习资料之Hive入门与实战.+Hive用户手册+hive函数大全中文版资源合集

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。 hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储...

    hivesql语句练习

    5.安装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下 如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行) mysql -uroot -p #(执行下面的语句 *.*:所有库下的所有表 %:任何IP地址...

    Hive数据仓库之垃圾分类数据分析系统

    (2)hive数据仓库分层设计,包含ODS、DWD、ADS层 (3)sqoop数据迁移,完成HIve与MySQL数据库中的数据交互 (4)Echarts搭建动态可视化大屏 (5)SpringBoot搭建可视化后台系统,完成前端与后台的数据传递与交互。 ...

    大数据笔记,包含Hadoop、Spark、Flink、Hive、Kafka、Flume、ZK......

    大数据笔记,包含Hadoop、Spark、Flink、Hive、Kafka、Flume、ZK...... 大数据笔记,包含Hadoop、Spark、Flink、Hive、Kafka、Flume、ZK...... 大数据笔记,包含Hadoop、Spark、Flink、Hive、Kafka、Flume、ZK.......

    hive-java开发驱动包

    hive java开发驱动包列表hive-common-2.3.4.jarhive-exec-2.3.4.jarhive-jdbc-2.3.4.jarhive-llap-client-2.3.4.jarhive-llap-common-2.3.4.jarhive-llap-server-2.3.4.jarhive-llap-tez-2.3.4.jarhive-metastore-...

    Hive-2.1.1-CDH-3.6.1 相关JDBC连接驱动 Jar 包集合

    02、hive-exec-2.1.1-cdh6.3.1.jar 03、hive-jdbc-2.1.1-cdh6.3.1.jar 04、hive-jdbc-2.1.1-cdh6.3.1-standalone.jar 05、hive-metastore-2.1.1-cdh6.3.1.jar 06、hive-service-2.1.1-cdh6.3.1.jar 07、libfb303-...

    flink-connector-hive-2.11-1.12.7-API文档-中文版.zip

    赠送jar包:flink-connector-hive_2.11-1.12.7.jar; 赠送原API文档:flink-connector-hive_2.11-1.12.7-javadoc.jar; 赠送源代码:flink-connector-hive_2.11-1.12.7-sources.jar; 赠送Maven依赖信息文件:flink-...

    Hive表生成工具,Hive表生成工具Hive表生成工具

    Hive表生成工具,Hive表生成工具Hive表生成工具

    apache-hive-2.1.1-bin.tar

    apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tarapache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tarapache-hive-2.1.1-bin.tar apache-hive-2.1.1-...

    DataX数据的迁移(MySQL、HDFS,Hive)

    1.将Mysql中的数据迁移到Hdfs文件系统中,然后通过Hive加载HDFS文件系统中的数据值 2.将Hive中的数据迁移到指定Mysql数据库中 注意点: 1.数据迁移的过程中,由于hive的Null值存储为"\N",Mysql存储为NULL值,二者...

    hadoop+hive+mapreduce的java例子

    基于hadoop的Hive数据仓库JavaAPI简单调用的实例,关于Hive的简介在此不赘述。hive提供了三种用户接口:CLI,JDBC/ODBC和 WebUI CLI,即Shell命令行 JDBC/ODBC 是 Hive 的Java,与使用传统数据库JDBC的方式类似 Web...

Global site tag (gtag.js) - Google Analytics