mysql内表和外表_Hive内表和外表的区别

本文以例子的形式介绍一下Hive内表和外表的区别。例子共有4个:不带分区的内表、带分区的内表、不带分区的外表、带分区的外表。

1 不带分区的内表

#创建表

create table innerTable(id int,name string) row format delimited fields terminated by ‘|’;(show tables发现没有innerTable,只有innertable。不多说,记住了)

#从HDFS上加载数据

load data inpath ‘hdfs://master:9000/user/root/test/innerTable’ into table innertable; (查看HDFS上/user/root/test/innerTable,发现文件价innerTable还在,但是里面的文件已经不在了。去哪了,去innertable表中了)

#删除刚刚创建的表

drop table innertable;(到HDFS上看一下innertable文件夹及其中的文件都没有了。去哪了,删除表的时候删除了)

2 带分区的内表

#创建表

create table inner_table_with_p(id int,name string) partitioned by (part_num int);(HDFS 出现文件夹inner_table_with_p,文件夹中为空)

#从HDFS加载数据

load data inpath ‘hdfs://master:9000/user/root/test/innerTable/part1′ into table inner_table_with_p partition(part_num=1)(文件夹inner_table_with_p出现子文件夹part_num=1,innerTable中part1消失);

load data inpath ‘hdfs://master:9000/user/root/test/innerTable/part2′ into table inner_table_with_p partition(part_num=2)(文件夹inner_table_with_p出现子文件夹part_num=2,innerTable中part2消失);

load data inpath ‘hdfs://master:9000/user/root/test/innerTable/part3′ into table inner_table_with_p partition(part_num=3)(文件夹inner_table_with_p出现子文件夹part_num=3,innerTable中part3消失);

#删除分区

alter table inner_table_with_p drop partition(part_num=1);(part_num=1对应分区文件夹本删除)

#删除表

drop table inner_table_with_p;(HDFS上inner_table_with_p文件夹被删除)

3 不带分区的外表

创建表

create external table outer_table(id int,name string) row format delimited fields terminated by ‘|’;      (hive仓储目录中出现outer_table)

加载数据

load data inpath ‘/user/root/test/outerTable/outer’ into table outer_table;(outer_table中出现子文件outer,outerTable中outer消失)

删除表

drop table outer_table;    (outer_table及子文件outer依然存在,因为这是外表)

4 带分区的外表

创建表

create external table outer_table_with_p(id int,name string) partitioned by (part_num int) row format delimited fields terminated by ‘|’; (hive仓储目录中出现outer_table_with_p)

加载数据

load data inpath ‘/user/root/test/outerTable/part1′ into table outer_table_with_p partiton(part_num=1);  (outer_table_with_p中出现子文件夹part_num=1)

load data inpath ‘/user/root/test/outerTable/part2′ into table outer_table_with_p partition(part_num=2);(outer_table_with_p中出现子文件夹part_num=2)

load data inpath ‘/user/root/test/outerTable/part3′ into table outer_table_with_p partition(part_num=3);(outer_table_with_p中出现子文件夹part_num=3)

删除分区

alter table outer_table_with_p drop partition(part_num=1);(HDFS上分区文件依旧存在)

删除表

drop table outer_table_with_p;(HDFS上对应数据依旧存在)

总结:

1 删除内表时,内表数据会一并删除;

2 删除外表时,外表数据依旧存在。

推荐阅读:

### 关于DorisHive的关系及其交互方式 在现代大数据处理环境中,Apache Doris Apache Hive 都扮演着重要角色。然而两者的设计目标有所不同:Doris 是一款实时OLAP数据库,旨在提供快速的数据查询能力;而 Hive 更像是一个基于 Hadoop 的数据仓库工具,适合用于批处理大规模静态数据集。 为了实现更灵活的数据访问模式以及提高整体系统的效率,在某些场景下可以考虑将二者结合起来使用。具体来说,通过配置 Doris 的 Hive Catalog 功能[^1],可以让 Doris 直接读取存储在 Hive 中的数据文件,从而无需重复导入导出操作即可享受两种技术的优势——既保留了原有 Hive 数据湖中的海量历史资料,又能够利用 Doris 实现高效的即席查询服务。 #### 使用Doris连接到Hive的具体方法如下: 首先需要确保已经正确设置了 MySQL 客户端环境来管理多源之间的切换命令 `switch` 可以帮助用户轻松改变当前会话所使用的外部所属的Catalog名称。当输入 `mysql> switch hive;` 后如果返回提示信息为 "Query OK, 0 rows affected" 则示成功选择了名为 'hive' 的Catalog[^5]。 接着可以通过创建外表的方式定义指向HDFS上由Hive管理的实际位置路径下的Parquet/ORC等格式化后的结构化数据文件作为新的逻辑视图供后续SQL语句调用分析之需。 ```sql CREATE EXTERNAL TABLE IF NOT EXISTS dws_sales_order_detail ( order_id BIGINT, product_id INT, quantity DOUBLE, price DECIMAL(9,2), create_time DATETIME ) ENGINE=HIVE PROPERTIES( "resource" = "hive_catalog", "database" = "default" ); ``` 上述代码片段展示了如何在一个支持 SQL 查询接口的应用程序里声明一张关联至远端 Hive 格的新实体对象实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值