当前位置: 首页 > article >正文

Hive的功能,Hive创建表的⽅式,Hive的表有⼏种

  1. Hive 功能描述
    • 数据存储与管理
      • Hive 是建立在 Hadoop 之上的数据仓库基础架构,它可以将结构化的数据文件映射为一张数据库表。它能够存储海量的数据,并且支持对存储在 Hadoop 分布式文件系统(HDFS)或其他兼容存储系统(如 Amazon S3 等)中的数据进行高效的管理。
      • 例如,对于一个大型电商公司,每天会产生海量的订单数据、用户数据等,这些数据可以存储在 HDFS 中,然后通过 Hive 进行管理,就像管理传统数据库中的表一样。
    • 数据查询与分析
      • Hive 提供了类似 SQL(Hive SQL,也称为 HiveQL)的查询语言,方便数据分析师和开发人员对存储的数据进行查询和分析。它可以执行复杂的数据分析操作,如聚合(SUM、COUNT、AVG 等)、过滤(WHERE 子句)、连接(JOIN 操作)等。
      • 比如,通过 Hive 可以查询出某个时间段内购买金额最高的用户列表,或者分析不同地区用户的购买行为等。
    • 数据 ETL(Extract,Transform,Load)操作
      • 在数据处理过程中,Hive 可以用于提取数据(从原始数据源),转换数据(如数据清洗、格式转换、数据标准化等),并将处理后的数据加载到目标数据存储中。它支持多种数据格式,包括文本文件、序列文件、ORC(Optimized Row Columnar)、Parquet 等,方便在不同的数据格式之间进行转换。
      • 例如,将从日志文件中提取的原始文本数据进行清洗和转换,将时间戳格式统一,然后加载到 Hive 表中,以便后续进行分析。
  2. Hive 创建表的方式
    • 使用 CREATE TABLE 语句创建表
      • 这是最基本的方式,类似于传统数据库中创建表的操作。可以定义表的列名、数据类型、列的注释等信息。例如:

        收起

        sql

        CREATE TABLE employees (
            id INT,
            name STRING,
            department STRING
        );
        
      • 可以指定表的存储格式,如 ORC、Parquet 等,还可以添加分区信息,例如:

        收起

        sql

        CREATE TABLE sales (
            product_id INT,
            sales_date STRING,
            amount DECIMAL(10,2)
        )
        PARTITIONED BY (year STRING, month STRING);
        
    • 通过复制已有的表来创建新表(CREATE TABLE AS SELECT)
      • 可以基于现有的表或查询结果来创建新表。例如,从一个包含所有用户信息的表中创建一个只包含活跃用户信息的新表:

        收起

        sql

        CREATE TABLE active_users AS
        SELECT * FROM all_users WHERE is_active = 1;
        
      • 这种方式在数据预处理、数据子集提取等场景中非常有用。
    • 使用动态查询来创建表(通过脚本)
      • 可以编写脚本,根据一定的条件动态地创建表。例如,根据日期动态创建分区表,每天的分区表结构相同,但表名或分区值根据日期变化:

        收起

        python

        # 假设这是一个使用Python的脚本,通过subprocess等模块调用Hive命令
        import subprocess
        import datetime
        
        current_date = datetime.date.today()
        year = str(current_date.year)
        month = str(current_date.month)
        table_name = f"sales_{year}_{month}"
        create_table_query = f"""
        CREATE TABLE {table_name} (
            product_id INT,
            sales_date STRING,
            amount DECIMAL(10,2)
        )
        PARTITIONED BY (year STRING, month STRING);
        """
        subprocess.call(["hive", "-e", create_table_query])
        
  3. Hive 表的类型
    • 管理表(Managed Table)
      • 也称为内部表,这种表的数据存储由 Hive 进行管理。当创建一个管理表时,Hive 会将数据存储在默认的数据仓库目录(通常是 HDFS 中的一个目录)下,并且对数据的生命周期进行管理,包括数据的加载、删除等操作。
      • 例如,当删除一个管理表时,其对应的存储在 HDFS 中的数据也会被删除。
    • 外部表(External Table)
      • 外部表的数据存储位置是由用户自己定义的,Hive 只是对这些外部数据进行映射。数据的所有权和管理不属于 Hive,即使在 Hive 中删除外部表,数据仍然保留在原来的存储位置。
      • 比如,对于已经存在于 HDFS 中的一些数据,通过创建外部表来进行查询和分析,而不用担心 Hive 操作会意外删除这些数据。
    • 分区表(Partitioned Table)
      • 分区表是一种对数据进行逻辑划分的表。通过按照某个或某些列的值(如日期、地区等)将数据划分到不同的分区中,可以提高查询性能。例如,一个销售数据表可以按照年份和月份进行分区,这样在查询特定年份和月份的销售数据时,只需要扫描相应的分区,而不需要扫描整个表。
    • 桶表(Bucketed Table)
      • 桶表是将数据按照某个列的哈希值划分到不同的桶(bucket)中。桶表可以进一步优化数据的抽样和某些特定类型的查询。例如,对于一个用户数据表,可以根据用户 ID 的哈希值将用户数据划分到不同的桶中,这样在进行基于用户 ID 的连接操作等时,可以提高效率。

http://www.kler.cn/a/458346.html

相关文章:

  • 嵌入式系统 第七讲 ARM-Linux内核
  • 自动化办公 | 根据成绩进行自动评级
  • JavaScript中的JSON是什么
  • SpringMVC进阶(自定义拦截器以及异常处理)
  • github提交不上去,网络超时问题解决
  • 极品飞车6的游戏手柄设置
  • 【保姆级】sql注入之堆叠注入
  • CSS基础入门【3】
  • 在 Windows 11 下的 WSL - Ubuntu 24.04 中安装 Torch 的记录
  • 在 Node.js 中正确处理 `async/await` 及数组迭代
  • jmeter并发用户逐步递增压测找性能拐点
  • CSS(三)盒子模型
  • uni-app开发-识图小程序-识图功能
  • 第 1 章 - Go语言简介
  • 测试带宽上行方法
  • Ubuntu meson使用
  • Elasticsearch:使用 Ollama 和 Go 开发 RAG 应用程序
  • [wzoi]Help Bubu
  • 【Python运维】构建基于Python的自动化运维平台:用Flask和Celery
  • 4-1 输出一组成绩中的最高分和最低分
  • JVM学习-内存结构(二)
  • ET中发送Get请求和Post请求(C#)
  • Spring Boot 3.x- 快速搭建入门
  • 【文献代码研究】工具方向、运动冗余和路径点时序协同优化用于机器人辅助制造...
  • 我的JAVA-Web基础(2)
  • 【网络安全 | 漏洞挖掘】如何通过竞态条件发现账户接管漏洞