关于HIVE的CRUD快速入门

news/2025/3/31 7:07:12/文章来源:https://www.cnblogs.com/leo130-blogs/p/18797378

Hive中的基本操作

创建 (Create)

  • 使用 CREATE TABLE 语句创建新表。
  • 示例:
    CREATE TABLE table_name (column1 datatype,column2 datatype,...
    )
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    STORED AS TEXTFILE;

Hive支持的五种存储类型

Hive支持以下五种主要的存储类型:

  1. 托管表 (Managed Tables): Hive同时管理元数据和数据。
  2. 外部表 (External Tables): Hive仅管理元数据,数据存储在外部位置。
  3. 分区表 (Partitioned Tables): 表被划分为多个分区,以提高查询性能。
  4. 分桶表 (Bucketed Tables): 表被划分为多个桶,以便高效的采样和连接操作。
  5. ACID表 (ACID Tables): 支持事务操作(插入、更新、删除)的表,具有ACID属性。

创建分区和分桶表 (Partition and Bucket Table)

分区和分桶的意义

  • 分区: 将数据按分区列的值存储在不同的目录中,适合按分区列查询数据,减少扫描的数据量,从而提高查询效率。
  • 分桶: 将数据按桶列的哈希值分布到不同的桶中,适合优化采样和连接操作,进一步提升查询性能。
  • 组合使用: 分区和分桶结合使用可以在大数据集上实现更高效的存储和查询。

创建分区表

  • 使用 PARTITIONED BY 语句创建分区表。
  • 示例:
    CREATE TABLE partitioned_table (column1 datatype,column2 datatype
    )
    PARTITIONED BY (partition_column datatype)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    STORED AS TEXTFILE;
    

创建分桶表

  • 使用 CLUSTERED BY 语句创建分桶表,并指定桶的数量。
  • 示例:
    CREATE TABLE bucketed_table (column1 datatype,column2 datatype
    )
    CLUSTERED BY (bucket_column) INTO number_of_buckets BUCKETS
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    STORED AS TEXTFILE;
    

创建分区和分桶表

  • 可以同时使用 PARTITIONED BYCLUSTERED BY 创建分区和分桶表。
  • 示例:
    CREATE TABLE partitioned_bucketed_table (column1 datatype,column2 datatype
    )
    PARTITIONED BY (partition_column datatype)
    CLUSTERED BY (bucket_column) INTO number_of_buckets BUCKETS
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    STORED AS TEXTFILE;
    

注意事项

  • 分区表将数据按分区列的值存储在不同的目录中,适合按分区列查询数据。
  • 分桶表将数据按桶列的哈希值分布到不同的桶中,适合提高查询性能。
  • 分区和分桶的选择应根据数据规模和查询模式进行权衡。
  • 使用 SET hive.enforce.bucketing=true;SET hive.enforce.partition=true; 确保插入数据时强制执行分桶和分区规则。

读取 (Read)

  • 使用 SELECT 语句从表中查询数据。
  • 示例:
    SELECT column1, column2
    FROM table_name
    WHERE condition;
    

更新 (Update)

  • Hive 不支持直接的 UPDATE 语句。可以通过以下方式实现:
    1. 创建一个包含更新数据的新表。
    2. 使用 INSERT OVERWRITE 替换旧表为新表。

删除 (Delete)

  • Hive 不支持直接的 DELETE 语句。可以通过以下方式实现:
    • 使用 INSERT OVERWRITE 将表覆盖为所需数据,排除需要删除的行。
    • 示例:
      INSERT OVERWRITE TABLE table_name
      SELECT *
      FROM table_name
      WHERE condition_to_keep_rows;
      

注意事项

  • Hive 设计用于批处理,不适合行级更新或删除操作。
  • 使用分区和分桶优化大数据集的性能。
  • 考虑使用 ACID 表以支持事务操作。

修改表 (Alter Table)

删除所有数据

  • 使用 TRUNCATE TABLE 语句删除表中的所有行,但不删除表本身。
  • 示例:
    TRUNCATE TABLE table_name;
    

更改表字符集

  • Hive 不直接支持更改表的字符集。但可以通过以下步骤实现:
    1. 创建一个具有所需字符集设置的新表。
    2. 将旧表中的数据插入到新表中。
    3. 如果需要,可以删除旧表。

重命名表

  • 使用 ALTER TABLE ... RENAME TO 语句重命名表。
  • 示例:
    ALTER TABLE old_table_name RENAME TO new_table_name;
    

添加/替换列

  • 使用 ALTER TABLE ... ADD COLUMNSREPLACE COLUMNS 语句修改表结构。
  • 示例(添加列):
    ALTER TABLE table_name ADD COLUMNS (new_column1 datatype, new_column2 datatype);
    
  • 示例(替换列):
    ALTER TABLE table_name REPLACE COLUMNS (column1 datatype, column2 datatype, ...);
    

更改表属性

  • 使用 ALTER TABLE ... SET TBLPROPERTIES 语句修改表属性。
  • 示例:
    ALTER TABLE table_name SET TBLPROPERTIES ('property_name'='property_value');
    

常见的Hive表属性

以下是一些常见的Hive表属性及其用途:

  1. EXTERNAL

    • 指定表是外部表。
    • 示例:
      CREATE EXTERNAL TABLE table_name (...);
      
  2. STORED AS

    • 指定表的数据存储格式。
    • 常见格式包括:TEXTFILE, SEQUENCEFILE, ORC, PARQUET, AVRO
    • 示例:
      STORED AS PARQUET;
      
  3. LOCATION

    • 指定表数据存储的HDFS路径(通常用于外部表)。
    • 示例:
      LOCATION '/path/to/data';
      
  4. TBLPROPERTIES

    • 设置表的自定义属性。
    • 示例:
      TBLPROPERTIES ('property_name'='property_value');
      
  5. ROW FORMAT

    • 定义表的行格式。
    • 示例:
      ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
      
  6. PARTITIONED BY

    • 定义分区列。
    • 示例:
      PARTITIONED BY (partition_column datatype);
      
  7. CLUSTERED BY

    • 定义分桶列及桶的数量。
    • 示例:
      CLUSTERED BY (bucket_column) INTO number_of_buckets BUCKETS;
      
  8. COMMENT

    • 为表或列添加注释。
    • 示例:
      COMMENT 'This is a sample table';
      
  9. SERDE

    • 指定表的序列化和反序列化库。
    • 示例:
      ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde';
      
  10. COMPRESSION
    - 指定表的压缩格式(通常与存储格式结合使用)。
    - 示例:
    sql STORED AS ORC TBLPROPERTIES ('orc.compress'='SNAPPY');

截断表

  • 使用 TRUNCATE TABLE 语句删除表中的所有行,但不删除表本身。
  • 示例:
    TRUNCATE TABLE table_name;
    
  • 如果表是分区表,可以截断特定分区:
    TRUNCATE TABLE table_name PARTITION (partition_column='value');
    
    • 注意:确保表不是外部表,因为 TRUNCATE TABLE 不适用于外部表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/907001.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP500代码怎么解决?常见的5xx网页错误及其原因

要修复5xxx错误,您需要解决服务器上导致该错误的问题,这可能需要代码调试、配置更新或安装新的系统组件,接下来为大家带来HTTP 500错误的解决方法,和常见的5xx网页错误及其原因。错误 500 是什么? HTTP 500 响应代码并不表示实际问题,它只是通知您服务器出现了问题。 内部…

Vue 插槽 slot-scope=scope

============================================================== 默认插槽 只有一个slot 具名插槽 当有多个slot时,每个slot有名字的插槽(name) 只有template才能用v-slot 【这个是新设计的技术 Vue2.6以后用的】作用域插槽 反向传数据 App.vue中,必须用 template 数…

VMware Workstation不支持的硬件版本,模块Upgrade启动失败

1、我是从高版本的VMware Workstation降级后,再打开之前的虚拟机报错如下 2、打开虚拟机文件目录,用文本打开虚拟机的 .vmx文件,搜索定位到 virtualHW 字段,修改该字段为自己当前VMware版本,然后保存并开机

Next.js中间件权限绕过漏洞分析(CVE-2025-29927)

本文代码版本为next.js-15.2.2 本篇文章首发在先知社区:https://xz.aliyun.com/news/17403 一、漏洞概述 CVE-2025-29927是Next.js框架中存在的一个高危中间件逻辑绕过漏洞,允许攻击者通过构造特定HTTP请求头,绕过中间件的安全控制逻辑(如身份验证、路径重写、CSP防护等)。…

vue+openlayers示例:线水流效果(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:推荐v16+。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: …

蓝屏STOP:0x0000007B

生产线需要,得准备一台Windows XP的操作系统电脑。在安装时,出现下面蓝屏,A problem has been detected and windows has been shut down to prevent damage to your computer. If this is the first time youve seen this stop error screen, restart your computer. If th…

必看!2025 年颠覆测试行业的 10 大 AI 自动化测试工具/平台(上篇)

大家好,我是狂师。 上周小孩子生病,住院照顾,停更了几天。 各位看官,等着急了吧,之前有粉丝后台留言,想了解学习一下,AI这么火爆,那市面上AI与自动化测试结合起来的有哪些推荐的工具/平台。 今天就这个话题来聊一聊。 前言 在软件迭代以“天”为单位的今天,随着软件迭…

2025年企业必读指南:文件摆渡系统的5大核心功能

在数字化转型的浪潮中,企业面临着前所未有的挑战与机遇。优化信息流转、提升协作效率、确保数据安全及合规性,已成为企业持续发展的关键要素。在这一背景下,文件摆渡系统作为连接不同网络、网域之间的桥梁,承担着文件传输、共享、管理和归档等多重任务,其重要性日益凸显。…

利用AI增强VS Code TypeScript插件:AnyToTS带来编程新体验

Any to TS: VSCode 扩展插件 概述 "Any to TS" 是一个强大的 VSCode 扩展插件,旨在将任何对象转换为 TypeScript 类型或接口。该工具基于 vscode-json-to-ts 进行功能扩展,提供了一系列便捷的功能,帮助开发者更高效地处理 TypeScript 类型定义。 核心功能 传统功能…

虚函数表里有什么?(一)——从一个普通类开始

本系列文章,旨在探究C++虚函数表中除函数地址以外的条目,以及这些条目的设计意图和作用,并介绍与此相关的C++类对象内存布局,最后将两者用图解的形式结合起来,给读者带来全局性的视角。让我们从一个简单的类出发,开启我们的探索之旅。前言 本系列文章,旨在探究C++虚函数…

《HelloGitHub》第 108 期

兴趣是最好的老师,HelloGitHub 让你对开源感兴趣!简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。github.com/521xueweihan/HelloGitHub这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、Java、Go、C/C++、Swift...让你在短…

读DAMA数据管理知识体系指南33参考数据和主数据活动

读DAMA数据管理知识体系指南33参考数据和主数据活动1. 主数据管理活动 1.1. 识别驱动因素和需求1.1.1. 每个组织都有不同的主数据管理驱动因素和障碍,受系统的数量和类型、使用年限、支持的业务流程以及交易和分析中数据使用方式的影响1.2. 评估和评价数据源1.2.1. 现有应用中…