Hive之set参数大全-5

发布时间 2024-01-08 21:32:37作者: OnePandas

I

限制外部表数据插入

set hive.insert.into.external.tables=true;

在Apache Hive中,通过INSERT INTO语句向外部表(External Table)插入数据时,有一些注意事项和限制。外部表是Hive中的一种特殊表,它与Hive管理的存储位置外部的数据进行关联,而不是将数据移动到Hive的默认存储位置。

以下是有关向外部表插入数据的一些建议和注意事项:

  1. INSERT INTO外部表的基本语法:

    INSERT INTO TABLE external_table_name [PARTITION (partition_column1[=value1], ...)]
    [VALUES(values_row1), ... | select_statement];
    
  2. 数据存储位置:

    • 插入数据时,确保理解外部表的数据存储位置。数据将直接插入到外部表指定的存储位置,而不是移动到Hive的默认存储位置。
  3. 分区表的处理:

    • 如果外部表是分区表,确保指定了正确的分区列和分区值。分区列和值可以在PARTITION子句中指定。
  4. 数据格式和字段映射:

    • 确保插入的数据与外部表的字段数和数据类型匹配。Hive将尝试将数据映射到外部表的列,因此确保数据格式和表结构一致是重要的。
  5. 覆盖现有数据:

    • 默认情况下,INSERT INTO语句将追加数据到外部表。如果需要覆盖现有数据,可以使用INSERT OVERWRITE语句。

示例:

INSERT OVERWRITE TABLE external_table_name [PARTITION (partition_column1[=value1], ...)]
[VALUES(values_row1), ... | select_statement];

请注意,使用INSERT OVERWRITE将删除外部表中的所有数据,并用新的数据进行替换。

总体而言,插入外部表时,确保理解外部表的特性以及数据存储的位置是非常重要的。在插入操作之前,最好先对外部表的结构和数据存储位置进行仔细检查。

插入数据到多级目录

set hive.insert.into.multilevel.dirs

在 Hive 中,插入数据到多级目录(multilevel directories)是指在分区表中的不同分区级别创建多层子目录,以更好地组织和存储数据。这在管理大量分区数据时可以提供更好的结构化和性能。

以下是一些关于在 Hive 中插入数据到多级目录的一般指导:

  1. 创建分区表: 首先,确保你已经创建了一个分区表,并定义了所需的分区列。例如:

    CREATE TABLE multilevel_table (col1 INT, col2 STRING)
    PARTITIONED BY (year INT, month INT, day INT);
    
  2. 插入数据到多级目录: 使用 INSERT INTO 语句插入数据时,确保指定了每个分区列的值,以确保数据被正确地存储在多级目录结构中。

    INSERT INTO TABLE multilevel_table PARTITION (year=2022, month=1, day=1)
    VALUES (1, 'data1'), (2, 'data2');
    

    这将把数据插入到 year=2022/month=1/day=1 这样的目录结构中。

  3. 使用动态分区插入: 你也可以使用动态分区插入数据,这样可以更方便地处理多个分区值。例如:

    INSERT INTO TABLE multilevel_table
    PARTITION (year, month, day)
    VALUES (2022, 1, 2, 3, 'data3'), (2022, 1, 3, 4, 'data4');
    

    在这个例子中,yearmonthday 是动态指定的分区列,数据将被插入到对应的目录。

  4. 使用多个分区列: 如果表有多个分区列,确保在插入数据时指定所有分区列的值。

    INSERT INTO TABLE multilevel_table PARTITION (year=2022, month=1, day=1)
    VALUES (1, 'data1'), (2, 'data2');
    

请根据你的分区表结构和需要的目录层级来调整插入语句。这样的多级目录结构对于数据管理和查询性能的提升是有帮助的。

指定是否将整数类型的时间戳(例如UNIX时间戳)转换为秒而不是毫秒

在 Hive 中,hive.int.timestamp.conversion.in.seconds是一个配置属性,用于指定是否将整数类型的时间戳(例如UNIX时间戳)转换为秒而不是毫秒。这个属性的设置可能会影响到时间戳的解析和处理。

如果将hive.int.timestamp.conversion.in.seconds配置为true,则表示Hive将整数类型的时间戳按秒解释。如果设置为false,则时间戳将按照默认的毫秒解释。

以下是一个示例配置:

<property>
  <name>hive.int.timestamp.conversion.in.seconds</name>
  <value>true</value>
</property>

在这个示例中,配置被设置为true,表示Hive应该按秒解释整数类型的时间戳。

这个配置属性的作用在于兼容处理整数类型的时间戳,因为在不同的系统和数据源中,时间戳的单位可能不同。一些系统使用毫秒,而另一些系统使用秒。

请注意,在使用此配置属性时,确保你的数据和查询逻辑与选择的时间戳单位一致,以避免不正确的时间解释。查看你所使用的Hive版本的官方文档,以确保获取准确的信息。

指定 RCFile 格式的记录缓冲区大小

在 Apache Hive 中,hive.io.rcfile.record.buffer.size 是一个配置属性,用于指定 RCFile 格式的记录缓冲区大小。RCFile 是一种列式存储格式,用于在 Hive 中存储表数据。记录缓冲区大小配置项影响着数据写入和读取的性能。

以下是一些关于 hive.io.rcfile.record.buffer.size 配置属性的一般信息:

  • 配置属性: hive.io.rcfile.record.buffer.size
  • 默认值: 用于记录的缓冲区大小的默认值是 4194304 字节(4 MB)。
  • 含义: 此属性指定了 RCFile 格式用于存储表数据时,每个记录的缓冲区大小。较大的缓冲区大小可以提高写入性能,但也可能导致较大的内存开销。用户可以根据实际场景调整这个值。

在 Hive 配置文件(通常是 hive-site.xml)中,你可以进行如下配置:

<property>
  <name>hive.io.rcfile.record.buffer.size</name>
  <value>4194304</value>
</property>

这里的 value 可以根据你的需求进行调整。如果你的表中的记录较大,增大缓冲区大小可能会带来性能优势。

请注意,配置项的影响因实际使用情况而异,建议在进行更改之前对性能进行测试和评估。另外,确保查看你所使用的 Hive 版本的官方文档,以获取最准确的配置信息。

指定 RCFile 格式的记录间隔大小

在 Apache Hive 中,hive.io.rcfile.record.interval 是一个配置属性,用于指定 RCFile 格式的记录间隔大小。RCFile 是一种列式存储格式,用于在 Hive 中存储表数据。记录间隔配置项影响着数据写入和读取的性能。

以下是关于 hive.io.rcfile.record.interval 配置属性的一般信息:

  • 配置属性: hive.io.rcfile.record.interval
  • 默认值: 用于记录的间隔大小的默认值是 10 条记录。
  • 含义: 此属性指定了 RCFile 格式用于存储表数据时,每个记录之间的间隔大小。较小的间隔可能导致更小的记录写入延迟,但也可能导致较小的块大小,增加元数据和存储开销。用户可以根据实际场景调整这个值。

在 Hive 配置文件(通常是 hive-site.xml)中,你可以进行如下配置:

<property>
  <name>hive.io.rcfile.record.interval</name>
  <value>10</value>
</property>

这里的 value 可以根据你的需求进行调整。如果你的表中的记录较小且写入速度较为重要,减小记录间隔可能会带来性能优势。

请注意,配置项的影响因实际使用情况而异,建议在进行更改之前对性能进行测试和评估。另外,确保查看你所使用的 Hive 版本的官方文档,以获取最准确的配置信息。

指定 RCFile 格式是否容忍数据损坏

在 Apache Hive 中,hive.io.rcfile.tolerate.corruptions 是一个配置属性,用于指定 RCFile 格式是否容忍数据损坏。RCFile 是一种列式存储格式,用于在 Hive 中存储表数据。

以下是关于 hive.io.rcfile.tolerate.corruptions 配置属性的一般信息:

  • 配置属性: hive.io.rcfile.tolerate.corruptions
  • 默认值: 该属性的默认值为 false
  • 含义: 如果将 hive.io.rcfile.tolerate.corruptions 设置为 true,则 Hive 将尝试容忍 RCFile 中的数据损坏,以尽可能地读取尽可能多的有效数据。如果设置为 false,则 Hive 在遇到数据损坏时可能会引发错误。

在 Hive 配置文件(通常是 hive-site.xml)中,你可以进行如下配置:

<property>
  <name>hive.io.rcfile.tolerate.corruptions</name>
  <value>true</value>
</property>

这里的 value 可以根据你的需求进行调整。如果你的数据源中可能存在一些损坏的数据,设置为 true 可以允许 Hive 尽可能读取有效的部分数据。

请注意,配置项的影响因实际使用情况而异,建议在进行更改之前对性能进行测试和评估。确保查看你所使用的 Hive 版本的官方文档,以获取最准确的配置信息。

指定在执行基于SARG(Search Argument)的查询时,SARG缓存的最大权重大小

在 Apache Hive 中,hive.io.sarg.cache.max.weight.mb 是一个配置属性,用于指定在执行基于SARG(Search Argument)的查询时,SARG缓存的最大权重大小。SARG是一种谓词下推优化技术,用于在查询时提高性能,只读取满足特定条件的数据。

以下是关于 hive.io.sarg.cache.max.weight.mb 配置属性的一般信息:

  • 配置属性: hive.io.sarg.cache.max.weight.mb
  • 默认值: 该属性的默认值通常为 -1,表示不设置特定的缓存大小。
  • 含义: 此属性指定了SARG缓存的最大权重大小,以兆字节(MB)为单位。权重大小是根据SARG的大小和其他相关因素进行计算的。

在 Hive 配置文件(通常是 hive-site.xml)中,你可以进行如下配置:

<property>
  <name>hive.io.sarg.cache.max.weight.mb</name>
  <value>1024</value>
</property>

在这个示例中,hive.io.sarg.cache.max.weight.mb 被设置为1024 MB,表示SARG缓存的最大权重为1 GB。

请注意,如果将该值设置为负数,表示没有明确的最大缓存大小限制。调整此配置可能对查询性能产生影响,具体的最佳值取决于查询模式、数据规模以及硬件配置等因素。

确保查看你所使用的 Hive 版本的官方文档,以获取最准确的配置信息。

J

指定在执行 MapJoin 操作时,Hive 应该使用的最大缓存大小

在 Apache Hive 中,hive.join.cache.size 是一个配置属性,用于指定在执行 MapJoin 操作时,Hive 应该使用的最大缓存大小。MapJoin 是一种处理连接操作的方式,其中一张表被缓存在内存中,以提高查询性能。

以下是关于 hive.join.cache.size 配置属性的一般信息:

  • 配置属性: hive.join.cache.size
  • 默认值: 该属性的默认值通常为 25000,表示缓存的最大行数为 25000 行。实际上,该值并不代表字节大小,而是连接表的行数。
  • 含义: 此属性指定了 MapJoin 操作时要使用的最大缓存大小。当执行连接操作时,Hive 可以将其中一张小表缓存在内存中,以减少连接时的磁盘 I/O。

在 Hive 配置文件(通常是 hive-site.xml)中,你可以进行如下配置:

<property>
  <name>hive.join.cache.size</name>
  <value>25000</value>
</property>

在这个示例中,hive.join.cache.size 被设置为 25000 行。你可以根据实际场景和系统资源的情况来调整这个值。

请注意,调整这个值可能会影响到内存的使用,因此在进行更改之前建议进行测试和评估。确保查看你所使用的 Hive 版本的官方文档,以获取最准确的配置信息。

指定 MapJoin 操作在生成输出之前等待的最大时间间隔

在 Apache Hive 中,hive.join.emit.interval 是一个配置属性,用于指定 MapJoin 操作在生成输出之前等待的最大时间间隔。MapJoin 是一种连接操作,其中一张表被缓存在内存中,以提高查询性能。

以下是关于 hive.join.emit.interval 配置属性的一般信息:

  • 配置属性: hive.join.emit.interval
  • 默认值: 该属性的默认值通常为 1000 毫秒(1秒)。
  • 含义: 此属性指定了在执行 MapJoin 操作时,生成输出之前等待的最大时间间隔。当 MapJoin 算法需要等待的时间超过此配置值时,它将生成目前为止已经积累的输出。

在 Hive 配置文件(通常是 hive-site.xml)中,你可以进行如下配置:

<property>
  <name>hive.join.emit.interval</name>
  <value>1000</value>
</property>

在这个示例中,hive.join.emit.interval 被设置为 1000 毫秒。你可以根据实际场景和系统资源的情况来调整这个值。

请注意,通过调整这个值,你可以影响 MapJoin 操作在生成输出之前的等待时间。在某些情况下,增大等待时间可能有助于提高性能,但要注意可能的延迟和资源使用。确保查看你所使用的 Hive 版本的官方文档,以获取最准确的配置信息。

指定是否允许在 MapJoin 操作中生成内部连接的剩余记录

在 Apache Hive 中,hive.join.inner.residual 是一个配置属性,用于指定是否允许在 MapJoin 操作中生成内部连接的剩余记录。MapJoin 是一种连接操作,其中一张表被缓存在内存中,以提高查询性能。

以下是关于 hive.join.inner.residual 配置属性的一般信息:

  • 配置属性: hive.join.inner.residual
  • 默认值: 该属性的默认值通常为 true
  • 含义: 此属性指定了是否允许在执行 MapJoin 操作时生成内部连接的剩余记录。如果设置为 true,Hive 将尝试生成所有内部连接的剩余记录。如果设置为 false,Hive 将不生成任何内部连接的剩余记录。

在 Hive 配置文件(通常是 hive-site.xml)中,你可以进行如下配置:

<property>
  <name>hive.join.inner.residual</name>
  <value>true</value>
</property>

在这个示例中,hive.join.inner.residual 被设置为 true,表示允许生成内部连接的剩余记录。你可以根据实际场景和查询需求来调整这个值。

请注意,调整这个值可能会影响到查询的结果集,因此在进行更改之前建议进行测试和评估。确保查看你所使用的 Hive 版本的官方文档,以获取最准确的配置信息。