gpt4 book ai didi

hive - Sqoop 导入按列数据类型拆分

转载 作者:行者123 更新时间:2023-12-02 08:18:49 24 4
gpt4 key购买 nike

sqoop 导入中按列分割的数据类型应该始终是数字数据类型(整数、bigint、数字)吗?不能是字符串吗?

最佳答案

是的,您可以拆分任何非数字数据类型。

但不建议这样做。

为什么?

用于分割数据 Sqoop 火灾

SELECT MIN(col1), MAX(col2) FROM TABLE

然后根据您的映射器数量进行划分。

现在以整数作为 --split-by 列为例

表中有一些 id 列,其值为 1 到 100,并且您使用 4 个映射器(sqoop 命令中的 -m 4)

Sqoop 使用以下方法获取最小值和最大值:

SELECT MIN(id), MAX(id) FROM TABLE

输出:

1,100

分割整数很容易。您将制作 4 个部分:

  • 1-25
  • 25-50
  • 51-75
  • 76-100

现在字符串为 --split-by

表中有一些 name 列,其值为“dev”到“sam”,并且您使用 4 个映射器(sqoop 命令中的 -m 4)

Sqoop 使用以下方法获取最小值和最大值:

SELECT MIN(id), MAX(id) FROM TABLE

输出:

开发者,山姆

现在如何将其分为 4 部分。根据 sqoop docs ,

/**
* This method needs to determine the splits between two user-provided
* strings. In the case where the user's strings are 'A' and 'Z', this is
* not hard; we could create two splits from ['A', 'M') and ['M', 'Z'], 26
* splits for strings beginning with each letter, etc.
*
* If a user has provided us with the strings "Ham" and "Haze", however, we
* need to create splits that differ in the third letter.
*
* The algorithm used is as follows:
* Since there are 2**16 unicode characters, we interpret characters as
* digits in base 65536. Given a string 's' containing characters s_0, s_1
* .. s_n, we interpret the string as the number: 0.s_0 s_1 s_2.. s_n in
* base 65536. Having mapped the low and high strings into floating-point
* values, we then use the BigDecimalSplitter to establish the even split
* points, then map the resulting floating point values back into strings.
*/

您将在代码中看到警告:

LOG.warn("Generating splits for a textual index column.");
LOG.warn("If your database sorts in a case-insensitive order, "
+ "this may result in a partial import or duplicate records.");
LOG.warn("You are strongly encouraged to choose an integral split column.");

在 Integer 示例中,所有映射器都将获得平衡负载(全部将从 RDBMS 获取 25 条记录)

对于字符串,数据排序的可能性较小。因此,很难为所有映射器提供相似的负载。

<小时/>

简而言之,将整数列用作 --split-by 列。

关于hive - Sqoop 导入按列数据类型拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40032752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com