HiveQL语法

2023-11-01

Hive SQL与标准SQL存在一些差异,但也是大同小异,HQL的基本语法为:

[ ] 中内容是可选的,{ }中内容是必选的,| 表示内容二选一,全大写单词为关键字

建表语法:

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, ...) [STORED 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.5.0)

[AS select_statement]  (Note: 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]

| SERED serde_name [WITH SERDEPROPERTIES (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

修改表语法:

(1) 添加分区

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

partition_spec

:  PARTITION (partition_col = partition_val, partition_col2 = partition_val2, ...)

(2) 删除分区 

ALTER TABLE table_name DROP partition_spec, partition_spec, ...

(3) 表重命名

ALTER TABLE table_name RENAME TO new_table_name

(4) 修改字段

ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name col_type [COMMENT col_comment]  [FIRST|AFTER col_name]

(5) 新增或替换字段

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

ADD是代表新增一字段,字段位置在所有列后面(partition 列前);REPLACE 则是表示替换表中所有字段。

建视图语法

CREATE VIEW [IF NOT EXISTS] view_name [(col_name [COMMENT col_comment], .. )]

[COMMENT view_comment]

[TBLPROPERTIES (property_name = property_value, ...)]

AS SELECT ...

查看表语法

(1) 查看当前库[指定库]中所有表名

SHOW TABLES [IN database] ;

(2) 查看表名,部分匹配

SHOW TABLES 'page.*' ;

SHOW TABLES '.*view' ;

(3) 查看某张表的所有Partition,如果没有就报错:

SHOW PARTITIONS table_name ;

(4) 查看某张表的结构:

DESC [EXTENDED | FORMATTED]  table_name ;

(5) 查看分区内容

SELECT * FROM table_name WHERE partition_col = partition_value ;

加载数据语法:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE]  INTO TABLE table_name [PARTITION (partition_col = partition_value, partition_col2 = parititon_value2 , ...)]

插入语法:

1、查询结果插入到Hive表中

(1) 标准语法:

INSERT OVERWRITE TABLE table_name [PARTITION (partition_col = partition_val, partition_col2 = partition_val2)] select_statement FROM from_statement ;

(2) 扩展(插入到多张表):

FROM from_statement

INSERT OVERWRITE TABLE table_name1 [PARTITION partition_col = partiiton_val, partition_col2 = partition_val2 ... ] select_statement

[INSERT OVERWRITE TABLE table_name2 [PARTITION partition_col ...] select_statement2] ...

(3) 扩展 (动态分区插入数据) :

INSERT OVERWRITE TABLE table_name PARTITION (partiition_col[=partition_val], partition_col2[=partition_val2] select_statement FROM from_statement

2、查询结果写入文件中

(1) 标准语法:

INSERT OVERWRITE [LOCAL] DIRECTORY directory select_statement ;

(2) 扩展(写入到多个文件);

FROM from_statement

INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1

[INSERT OVERWRITE [LOCAL] DIRECTORY directory2 select_statement2] ...

删除语法:

DROP TABLE [IF EXISTS] table_name ;

删除一个内部表会同时删除表的元数据和数据;删除一个外部表,只删除元数据而保留数据。

查询语法:

SELECT [ALL | DISTINCT] select_expr, select_expr2, ...

FROM table_name

[WHERE where_condition]

[GROUP BY col_list]

[

   [CLUSTER BY col_list | DISTRIBUTE BY col_list]  [SORT BY col_list]

]

[LIMIT number]

关联语法:

table_reference [INNER] JOIN table_reference [join_condition]

| table_reference {LEFT | RIGHT | FULL} [OUTER] JOIN table_reference join_condition

| table_reference  LEFT SEMI JOIN table_reference join_condition

table_reference

: table_name

| table_subquery alias

| (table_references)

join_condition

: ON expr = expr [AND expr2=expr2]...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HiveQL语法 的相关文章

随机推荐

  • 【Docker】使用 Docker Registry 搭建自己的 Docker 镜像仓库

    使用 Docker Registry 搭建自己的 Docker 镜像仓库 在使用 Docker 进行应用程序的开发和部署时 使用 Docker 镜像仓库是一个很好的实践 它允许集中存储和管理 Docker 镜像 方便团队协作和版本控制 在本
  • wireshark 流量抓包例题重现

    题目一 题目要求 1 黑客攻击的第一个受害主机的网卡IP地址 2 黑客对URL的哪一个参数实施了SQL注入 3 第一个受害主机网站数据库的表前缀 加上下划线例如abc 4 第一个受害主机网站数据库的名字 看到题目SQL注入 那就首先过滤ht
  • Springboot项目打war包部署到外置tomcat容器【详解版】

    一 修改打包方式
  • 维金细说“virtualization”

    摘要 在这个时代下 虚拟化已经成为毋庸置疑的主角 虚拟化对生活的影响也是方方面面的 熟悉 网络虚拟化的朋友知道 这是一种基于软件的 抽象的 从物理元素中分离流量的一种方式 近年来 随着云计算和大数据的诞生和飞速发展 各种虚拟化技术也好似 雨
  • Python--遍历列表时删除元素的正确做法

    一 问题描述 这是在工作中遇到的一段代码 原理大概和下面类似 判断某一个元素是否符合要求 不符合删除该元素 最后得到符合要求的列表 a 1 2 3 4 5 6 7 8 for i in a if i gt 5 pass else a rem
  • javafx预览PDF

    第一种方法 调用其它可外部程序打开 Runtime getRuntime exec rundll32 url dll FileProtocolHandler new File C Program Files aaa 202306171607
  • 代码混淆不一定要花大价钱,Code Virtualizer也能轻松搞定!

    任何创建创新性应用程序 DLL或设备驱动程序的开发人员都希望将代码尽可能机密 以避免第三方公司 开发人员研究应用程序内的代码并为自己的利益而窃取代码 一些开发人员使用外部保护系统来打包应用程序并保护其免受攻击者的侵害 但是大多数时候 这些保
  • Flutter实现底部菜单栏+页面切换(BottomNavigationBar+PageVIew)

    需求 实现底部主页 我的两个菜单栏 实现和页面联动点击 滑动切换 需求 底部实现两个菜单 首页 我的 和页面实现滑动 点击切换联动 1 底部菜单栏 第一时间就想到了 Scaffold部件的属性 bottomNavigationBar bot
  • tensorflow2 tf2 PG算法 强化学习玩乒乓球

    使用确定性策略梯度玩乒乓球 网上很多案例抄写下来 实际使用发现都无法收敛 花了很多时间纠错 然后从parl提供的代码作为核心参考 收集了其他案例中的优点 自己在tensorflow2中实现了算法 并测试成功收敛 0 99累计奖励 0 01
  • 华为云云耀云服务器L实例评测|怎么搭建企业综合Web平台

    前言 记得2019年 公司搞混合云的时候 测试过多家公有云 其中就有华为云 因公司也在深圳 项目也比较急 我司业务上云经验又不足 华为官方获悉情况后 第二天就派了4人小团队到我司来交流 整个交流过程非常流畅 从华为云的优势 华为POP点到我
  • 三种交换方式:电路交换、分组交换、报文交换

    三种交换方式 电路交换 分组交换 报文交换 电路交换 当 n n n部电话需要两两相连时 需要 C n 2
  • pycharm更换python解释器(anaconda和python官网)

    找到pycharm的文件按钮 2 点击设置按钮 3 点击项目 再点击python解释器就会出现这个窗口了 4 笔者这里是conda解释器 如果是python官网安装的就要点第一个 然后就是找到python解释器的路径了 一般我们要找的是这个
  • Python输出列表(List)不带中括号和引号

    正常python输出列表List时 会自动加上中括号和引号 例如 gt gt gt list1 a b c d gt gt gt list1 a b c d 解决方法一 使用join gt gt gt print join list1 a
  • 第四届蓝桥杯国赛C++B组 空白格式化

    标题 空白格式化 本次大赛采用了全自动机器测评系统 如果你的答案与标准答案相差了一个空格 很可能无法得分 所以要加倍谨慎 但也不必过于惊慌 因为在有些情况下 测评系统会把你的答案进行 空白格式化 其具体做法是 去掉所有首尾空白 中间的多个空
  • 数学建模基本算法模型

    全国大学生数学建模竞赛中常用的算法模型包括但不限于以下几种 线性回归模型 用于建立变量之间线性关系的模型 常用于预测和分析数据 逻辑回归模型 用于建立变量之间的非线性关系 常用于分类问题和概率预测 决策树模型 将数据集分解成更小的数据集 并
  • Excise_Thread2

    1 下列关于多线程中锁机制正确的是 A 关键字synchronized只能用于方法声明上 B 成员方法使用synchronized 那么当前方法的锁对象为当前方法所属的对象 C 静态方法使用synchronized 那么当前方法的锁对象为当
  • 【已解决】Nacos配置出现错误:Error creating bean with name‘memoryMonitor‘

    Nacos版本2 2 3 可先参考这个 https blog csdn net weixin 41195886 article details 127841630 解决建议都尝试一下 在user和password后边加个 0 老版本 未测试
  • O - Muddy roads

    Farmer John has a problem the dirt road from his farm to town has suffered in the recent rainstorms and now contains 1 l
  • centos7上搭建http服务器以及设置目录访问

    步骤 安装httpd服务 sudo yum install httpd Apache 的所有配置文件都位于 etc httpd conf 和 etc httpd conf d 网站的数据默认位于 var www 但如果你愿意 你可以改变它
  • HiveQL语法

    Hive SQL与标准SQL存在一些差异 但也是大同小异 HQL的基本语法为 中内容是可选的 中内容是必选的 表示内容二选一 全大写单词为关键字 建表语法 CREATE EXTERNAL TABLE IF NOT EXISTS table