hive 三种表的创建

本文介绍了Hive中的数据导入方法,包括从本地和HDFS导入。接着详细讲解了创建内部表和外部表的语法,并通过示例展示了如何创建分隔符定制的复杂数据格式表。同时,提到了Hive的分区表概念,包括静态和动态分区的创建。最后,讨论了Hive的临时表和桶表,以及如何进行数据抽样。

导入数据:
1、load data local inpath ‘本地虚假机文件路径’ into table 数据库(.)表名;
将本地的数据导入到hive中
从hdfs集群导入数据
2、load data inpath ‘hdfs://虚拟机名称:9000/user/tes.txt’ into table test.te;

创建表:
内部表–删除之后数据全部丢失
外部表–删除元数据之后源数据还存在
1、结构一样,但是数据不一样 ----like
create table bws like te;
2、结构一样,数据也一样----as
create table bws2 as select * from tes;

ROW FORMAT DELIMITED : 行格式分隔
FIELDS TERMINATED BY ’,’ : 字段之间使用空格分隔
COLLECTION ITEMS TERMINATED BY ‘-’ : 集合(就是这的数据)使用逗号分隔
MAP KEYS TERMINATED BY ‘:’ : 键值对使用冒号分隔
LINES TERMINATED BY ‘\n’ : 记录之间使用换行符分隔

课下作业:
create table psn1(
id int,
name varchar(11),
hobby arrays,
address map<string,string>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ’,’
COLLECTION ITEMS TERMINATED BY ‘-’
MAP KEYS TERMINATED BY ‘:’ :
LINES TERMINATED BY ‘\n’
数据格式:
11,小明11,lol-book-movie,beijing:bawei-shanghai:putdong
11,小明12,lol-book-movie,beijing:bawei-shanghai:putdong

<think>我们正在讨论Hive,用户想要查询Hive创建时间。根据引用[1]中提到,我们可以获取hive当前的创建时间和名。但是,引用中并没有给出具体的查询方法。因此,我们需要提供在Hive中查询创建时间的方法。 在Hive中,创建时间存储在元数据中。Hive的元数据通常存储在关系型数据库中(如MySQL、PostgreSQL等),我们可以通过查询Hive的元数据库来获取创建时间。但是,直接查询元数据库需要相应的权限,并且需要了解元数据库的结构。 另外,Hive也提供了一些命令和函数来查看的详细信息,其中就包括创建时间。我们可以使用`DESCRIBE EXTENDED`或`SHOW CREATE TABLE`命令来查看的元数据,这些信息中包含了创建时间。 具体步骤如下: 1. 使用`DESCRIBE EXTENDED`命令: ```sql DESCRIBE EXTENDED [database_name.]table_name; ``` 或者,对于分区表,可以使用: ```sql DESCRIBE FORMATTED [database_name.]table_name; ``` 在返回的详细信息中,我们可以找到`createTime`字段,它创建时间。 2. 使用`SHOW CREATE TABLE`命令: ```sql SHOW CREATE TABLE [database_name.]table_name; ``` 这个命令会返回创建的DDL语句,其中也包含了创建时间。 但是,这些命令返回的信息是文本格式,我们需要从中提取创建时间。如果希望直接以结构化数据的形式获取创建时间,我们可以查询Hive的元数据库。 元数据库查询(以MySQL为例): 在Hive的元数据库中,`TBLS`存储了的基本信息,`DBS`存储了数据库的信息。我们可以通过连接这两个来获取创建时间。 查询语句如下: ```sql SELECT D.NAME AS database_name, T.TBL_NAME AS table_name, FROM_UNIXTIME(T.CREATE_TIME) AS create_time FROM TBLS T JOIN DBS D ON T.DB_ID = D.DB_ID WHERE T.TBL_NAME = 'your_table_name'; -- 替换为你的名 ``` 注意:直接查询元数据库需要权限,并且元数据库的结构可能因Hive版本而异。 如果用户没有权限访问元数据库,那么使用Hive的`DESCRIBE FORMATTED`命令可能是更可行的方式。然后,我们可以通过解析输出信息来获取创建时间。 示例使用`DESCRIBE FORMATTED`: 假设我们有一个`test_table`,执行: ```sql DESCRIBE FORMATTED test_table; ``` 在输出中,查找`Detailed Table Information`部分,其中会有一行`createTime:`,后面跟着一个时间戳(通常是Unix时间戳格式)。 但是,如果用户想要在Hive查询中直接获取创建时间,我们可以考虑创建一个脚本来解析`DESCRIBE FORMATTED`的输出,或者使用Hive的内置函数来转换时间戳。 另外,需要注意的是,Hive创建时间在元数据中是以Unix时间戳(秒)的形式存储的,所以我们需要将其转换为可读的日期格式。 总结: 方法一(推荐):使用Hive命令行或HiveQL的`DESCRIBE FORMATTED`命令,然后从输出中提取创建时间。 方法二:如果有权限,直接查询Hive元数据库。 方法三:使用`SHOW CREATE TABLE`命令,输出中也会包含创建时间(同样需要解析)。 由于用户可能没有权限访问元数据库,我们重点介绍方法一: 步骤: 1. 在Hive命令行中执行: ```sql DESCRIBE FORMATTED your_table; ``` 2. 在输出结果中查找`createTime`,例如: ``` ... createTime: 1681234567 ... ``` 或者,在某些版本中,它可能直接显示为可读格式: ``` CreateTime: Tue Apr 11 16:00:00 CST 2023 ``` 3. 如果显示的是时间戳,我们可以使用Hive的`from_unixtime`函数将其转换为可读格式,但注意,`DESCRIBE`命令的输出是文本,不能在同一个查询中直接转换。因此,我们可以考虑将输出重定向到一个文件,然后使用脚本提取时间戳并转换。 如果用户需要批量获取多个创建时间,可以编写一个脚本,循环执行`DESCRIBE FORMATTED`并提取信息。 另外,Hive从0.10.0版本开始,元数据库中的`TBLS`有`CREATE_TIME`字段(存储的是Unix时间戳)。所以,如果用户有权限,方法二(查询元数据库)是最直接和高效的。 考虑到用户的问题只是“如何查询Hive创建时间”,我们给出两种主要方法,并说明各自的适用场景。 下面,我们按照要求,生成相关问题。</think>### 如何在 Hive 中查询创建时间 #### 方法 1:使用 `DESCRIBE EXTENDED/FORMATTED` 命令(推荐) 这是最直接的方法,适用于所有 Hive : ```sql -- 查看的详细元数据(包含创建时间) DESCRIBE FORMATTED [database_name.]table_name; -- 示例输出片段: ... # Detailed Table Information Database: default Owner: hiveuser CreateTime: Wed Mar 15 09:30:45 CST 2023 <-- 创建时间 LastAccessTime: UNKNOWN Retention: 0 Location: hdfs://namenode/path/to/table Table Type: MANAGED_TABLE ... ``` **关键点**: - 在输出结果中查找 `CreateTime` 字段 - 时间格式:`星期 月份 日期 时:分:秒 时区 年份` - 适用于分区表和非分区表[^1] #### 方法 2:查询 Hive 元数据库(需权限) 如果直接访问 Hive 元数据库(如 MySQL),可通过 SQL 查询: ```sql SELECT d.NAME AS database_name, t.TBL_NAME AS table_name, FROM_UNIXTIME(t.CREATE_TIME) AS create_time -- 转换时间戳 FROM TBLS t JOIN DBS d ON t.DB_ID = d.DB_ID WHERE t.TBL_NAME = 'your_table_name'; ``` **说明**: - `TBLS` 存储所有的基本信息 - `CREATE_TIME` 字段是 Unix 时间戳(需用 `FROM_UNIXTIME` 转换) - 需要元数据库的读取权限[^1] #### 方法 3:通过 HDFS 文件创建时间推断 对于外部,可通过 HDFS 目录创建时间近似判断: ```bash hdfs dfs -stat "%y" /path/to/table # 输出:2023-03-15 09:30:45 ``` **注意**: - 仅适用于外部(`EXTERNAL TABLE`) - 实际创建时间可能早于 HDFS 目录时间 - 不适用于纯元数据(无 HDFS 存储) --- ### 注意事项 1. **时间精度** Hive 只记录创建时间,不记录字段级修改时间 2. **分区表特殊处理** 分区表创建时间指**结构定义时间**,而非分区数据写入时间[^2]。查询分区创建时间需: ```sql SHOW PARTITIONS table_name; -- 查看分区元数据 ``` 3. **临时差异** 临时(`WITH t1 AS (...)`)的生命周期仅限于当前会话,不会记录创建时间[^3] 4. **版本兼容性** Hive 3.0+ 的 `DESCRIBE FORMATTED` 输出包含更详细的时间信息 > ⚠️ **重要**:如果是通过 `CREATE TABLE ... AS SELECT` 创建的,`CreateTime` 记录的是执行 DDL 的时间,而非数据生成时间。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值