hive建表初始数据
时间: 2024-11-25 15:31:28 浏览: 54
在Hive中创建表并初始化数据通常涉及两个步骤:首先创建表结构,然后通过INSERT INTO TABLE语句将数据加载到表中。如果你已经有了一些初始数据,你可以直接提供数据文件路径或者使用数据导出工具(如`COPY`命令)。
创建表的例子(假设有一个名为`employees`的表,包含`id`, `name`, 和 `salary`字段):
```sql
CREATE TABLE employees (
id INT,
name STRING,
salary DECIMAL(10, 2)
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
```
这将创建一个文本文件格式的表,逗号分隔值。
然后,你可以使用`LOAD DATA INPATH`或`COPY INTO TABLE`命令加载数据:
```sql
-- 使用本地路径
LOAD DATA LOCAL INPATH '/path/to/your/datafile.txt' INTO TABLE employees;
-- 或者从HDFS加载
LOAD DATA INPATH 'hdfs://namenode:port/path/to/datafile.txt' INTO TABLE employees;
```
如果你的数据是以特定格式存在,例如CSV、TSV或JSON,你需要相应地调整`FIELDS TERMINATED BY`和`STORED AS`部分。
相关问题
hive 建库 建表
### Hive 创建数据库及表的语法与示例
#### 数据库创建
在 Hive 中,可以通过 `CREATE DATABASE` 或 `CREATE SCHEMA` 命令来创建一个新的数据库。命令的具体语法如下:
```sql
CREATE DATABASE [IF NOT EXISTS] database_name
[COMMENT 'database_comment']
[LOCATION 'directory_path']
[WITH DBPROPERTIES (property_name=property_value, ...)];
```
- `[IF NOT EXISTS]`: 如果指定名称的数据库不存在,则创建新数据库。
- `[COMMENT 'database_comment']`: 可选字段,用于描述该数据库的信息。
- `[LOCATION 'directory_path']`: 指定存储数据的位置路径,默认情况下会在 HDFS 的 `/user/hive/warehouse` 下创建目录。
- `[WITH DBPROPERTIES (...)]`: 设置数据库属性。
例如,下面是一个简单的例子[^3]:
```sql
CREATE DATABASE IF NOT EXISTS my_database
COMMENT 'This is a test database'
LOCATION '/user/hive/my_database';
```
此命令将在 HDFS 上创建名为 `my_database` 的数据库,并附带注释说明以及自定义位置。
要切换到某个特定数据库下执行查询或其他操作,可使用 `USE` 子句:
```sql
USE my_database;
```
这使得后续所有的 SQL 查询都作用于当前选定的数据库中。
#### 表创建
Hive 支持多种类型的表格结构,包括内部表(Managed Table)、外部表(External Table),还有临时表(Temporary Table)等。
##### 内部表(Managed Table)
这是最常用的建表形式之一,在删除此类表时其元数据和实际的数据都会被清除掉。基本语法为:
```sql
CREATE TABLE [IF NOT EXISTS] table_name (
col1 data_type,
col2 data_type,
...
)
[COMMENT 'table_comment']
[PARTITIONED BY (col_name data_type)]
[CLUSTERED BY (col_name) INTO num_buckets BUCKETS]
[SORTED BY (col_name [ASC|DESC])]
[ROW FORMAT DELIMITED FIELDS TERMINATED BY char LINES TERMINATED BY char]
[STORED AS file_format];
```
举个实例演示如何构建一张包含分区信息并采用 ORC 文件格式储存的新表[^1]:
```sql
CREATE TABLE employees(
id INT,
name STRING,
salary FLOAT,
join_date DATE
)
COMMENT 'Employee details with partitioning on department.'
PARTITIONED BY(department STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS ORC;
```
上述脚本建立了一个员工记录表,其中按部门划分了多个分区以便更高效地检索相关联的数据集。
##### 外部表(External Table)
当不想让 Hive 控制底层数据文件生命周期的时候可以选择这种方式。即使移除对应的 Hive 表对象也不会影响原始数据源的存在状态。其声明方法几乎相同只是多了前缀关键词 EXTERNAL 而已。
```sql
CREATE EXTERNAL TABLE external_table_name (
column_definitions...
)
[LOCATION hdfs_directory_path];
```
比如这样设置指向已有 HDFS 地址上的 CSV 文档作为输入资源:
```sql
CREATE EXTERNAL TABLE logs_ext (
log_time TIMESTAMP,
message STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES ('field.delim'=',')
LOCATION '/logs/csv/';
```
这里指定了 SerDe 类型处理逗号分割符的情况。
##### 临时表(Temporary Table)
这类特殊用途的表只存在于发起它们的那个 session 生命周期期间结束之后就会消失不见再也无法访问到了。通常适用于那些只需要短期存在的中间计算成果或者测试验证场景之中。可通过附加 TEMPORARY 标识位实现快速搭建过程[^2].
```sql
-- 方法一:通过列定义直接生成
CREATE TEMPORARY TABLE temp_employee (
emp_id INT,
first_name STRING,
last_name STRING
);
-- 方法二:基于现有表复制架构
CREATE TEMPORARY TABLE temp_copy LIKE permanent_table;
-- 方法三:利用 SELECT INTO 构造初始内容填充
CREATE TEMPORARY TABLE temp_results AS
SELECT * FROM source_data WHERE condition=true;
```
以上三种途径均展示了不同风格下的临时表构造技巧供开发者灵活选用满足各自需求特点。
---
hive安装执行hive脚本
### Hive 安装教程
#### 准备工作
为了成功安装 Apache Hive,在环境配置方面需确保已正确部署 Java 和 Hadoop 并设置好相应的环境变量。Java 是运行 Hive 的基础,而 Hadoop 提供分布式存储和计算框架。
#### 下载并解压 Hive
访问官方下载页面获取最新稳定版本的 Hive 压缩包,并将其放置到服务器上的合适位置进行解压缩操作[^1]。
```bash
tar zxvf apache-hive-x.y.z-bin.tar.gz -C /opt/
cd /opt/apache-hive-x.y.z-bin
```
#### 配置环境变量
编辑 `~/.bashrc` 或者 `/etc/profile.d/hive.sh` 文件来添加如下内容:
```bash
export HIVE_HOME=/opt/apache-hive-x.y.z-bin
export PATH=$PATH:$HIVE_HOME/bin
```
使更改生效:
```bash
source ~/.bashrc # or source /etc/profile.d/hive.sh depending on where you added the export commands.
```
#### 初始化 Metastore 数据库
创建 MySQL 用户及数据库用于保存元数据信息;接着利用 schematool 工具完成建表动作。
```sql
CREATE DATABASE metastore;
GRANT ALL PRIVILEGES ON metastore.* TO 'hiveuser'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
schematool -dbType mysql -initSchema
```
#### 修改配置文件
调整 hive-site.xml 来指定连接字符串和其他必要的参数。
```xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hiveuser</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>password</value>
</property>
```
---
### 执行 Hive 脚本方法
#### 使用 `-f` 参数执行 SQL 文件
当有一个预先编写好的 `.hql` 文件时,可以使用命令行工具中的 `-f` 参数直接加载该文件作为输入源。
```bash
hive -f /path/to/your_script.hql
```
此方式适用于批量处理任务或自动化作业场景下的查询提交需求。
#### 利用 `-e` 参数即时执行单条或多条语句
对于简单的测试或是临时性的数据分析请求,则可以直接通过 `-e` 后跟具体要执行的内容来进行交互式的查询活动。
```bash
hive -e "SELECT * FROM table LIMIT 10;"
```
这种方式适合快速验证想法而不必事先准备单独的脚本文档[^3]。
#### 自动化与调度集成
如果希望定期自动触发某些固定模式的任务流程(比如每日汇总报表),那么可以通过 Oozie 这样的工作流引擎实现更复杂的业务逻辑编排,包括但不限于 Shell、Pig、MapReduce 等不同类型的工作单元组合起来形成完整的 ETL 流程[^4]。
阅读全文
相关推荐


















