Hive 删除表或导入数据卡死

项目场景:

通过HQL删除表和导入数据

问题描述

Hive 删除表或导入数据卡死,同时也不报错,一直停留在HQL页面,也不执行。

drop table XXX

原因分析:

Hive中表有锁

解决方案:

查看是否有锁:

show locks

【说明】:发现有的表有锁有的表无锁,但还是删除不了
【注】hive存在两种锁,共享锁Shared (S)和互斥锁Exclusive (X)
触发共享锁的操作是可以并发执行的
但是触发互斥锁,那么该表和该分区就不能并发的执行作业了。

解锁[存在锁]:

unlock table XXX

关闭锁机制:

【说明】:无锁的先把锁机制关闭,因为其他表有锁证明锁机制是开启的

set hive.support.concurrency=false;

删除表和导入数据操作即可

### Hive导入数据的方法 在Hive中,将数据导入到空可以通过多种方式实现。以下是几种常见的方法,并结合提供的引用内容进行详细说明。 #### 方法一:从本地文件导入数据 通过 `LOAD DATA` 语句可以将本地文件中的数据直接加载到Hive中。此方法适用于小规模数据集的导入。 ```sql LOAD DATA LOCAL INPATH '/path/to/local/file/t_user.txt' INTO TABLE test_user; ``` 上述命令会将 `/path/to/local/file/t_user.txt` 文件中的数据加载到 `test_user` 中[^1]。需要注意的是,如果使用了 `LOCAL` 关键字,则示从本地文件系统加载数据;否则是从 HDFS 加载数据。 #### 方法二:从其他插入数据 通过 `INSERT INTO` `INSERT OVERWRITE` 语句可以从其他中选择数据并插入到目标中。这种方式适合于大规模数据的迁移转换。 ```sql INSERT INTO TABLE test_user SELECT id, name FROM source_table; ``` 如果需要覆盖目标中的现有数据,则可以使用 `INSERT OVERWRITE`: ```sql INSERT OVERWRITE TABLE test_user SELECT id, name FROM source_table; ``` 此外,当目标包含分区时,可以在插入语句中指定分区信息[^2]。例如: ```sql INSERT INTO TABLE HiveTest_1 PARTITION(day='2022-07-22') SELECT activity_id, tocc_name, app_key, page, visit_type FROM s_activity_log; ``` #### 方法三:创建外部并关联数据 创建一个外部(External Table),并将数据存储路径指向已存在的 HDFS 路径。这种方式适合于数据已经存在于 HDFS 中的情况。 ```sql CREATE EXTERNAL TABLE IF NOT EXISTS ext_student ( s_id INT, s_name STRING, s_birth DATE, s_sex STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION '/tmp/hive_test/data/student'; ``` 上述命令创建了一个外部 `ext_student`,并且其数据存储在 HDFS 的 `/tmp/hive_test/data/student` 路径下[^3]。 #### 方法四:解决数据导入后为空的问题 在某些情况下,可能会遇到数据导入后显示为空的问题。这可能是由于 SQL 语句中的逻辑错误导致的。例如,多个通过 `UNION ALL` 合并时,可能存在冲突不匹配的数据[^5]。因此,在执行复杂查询之前,建议先验证每个子查询的结果是否正确。 另外,确保 Hive 配置参数设置正确,例如动态分区模式和执行引擎配置[^4]: ```sql SET hive.exec.dynamic.partition=true; SET hive.exec.dynamic.partition.mode=nonstrict; SET hive.execution.engine=tez; ``` #### 示例代码 以下是一个完整的示例,展示如何从本地文件导入数据Hive中: ```sql -- 创建目标 CREATE TABLE test_user ( id INT, name STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE; -- 导入本地文件数据 LOAD DATA LOCAL INPATH '/root/t_user.txt' INTO TABLE test_user; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值