gpt4 book ai didi

hadoop - 将多个数据库中的表导入 Hadoop 和 Union

转载 作者:可可西里 更新时间:2023-11-01 15:30:34 27 4
gpt4 key购买 nike

我有这个特定的场景:

SQL Server 中有按年命名的数据库,其命名类似于“FOOXXYY”,其中 XXYY 表示财政年度。现在我想从所有这些数据库中取出一个特定的表“bar”,将其联合到配置单元中的单个表中并将其存储到 HDFS 中。

最好和最快的方法是什么?

最佳答案

您需要创建数据库、创建分区表、添加分区、运行 4 个不同的 sqoop 命令以连接到每个数据库并将数据加载到分区中。以下是示例代码片段。

这样创建数据库,然后分区表;

CREATE TABLE `order_items`(
`order_item_id` int,
`order_item_order_id` int,
`order_item_order_date` string,
`order_item_product_id` int,
`order_item_quantity` smallint,
`order_item_subtotal` float,
`order_item_product_price` float)
PARTITIONED BY (
`order_month` string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|';

然后您可以使用这些命令添加分区:

alter table order_items add partition (order_month=201301);
alter table order_items add partition (order_month=201302);

创建表后,您可以运行describe formatted order_items。它将给出表的路径,您可以在配置单元中使用 dfs -ls 命令进行验证。

From describe formatted
Location: hdfs://sandbox.hortonworks.com:8020/apps/hive/warehouse/retail_ods.db/order_items

dfs -ls /apps/hive/warehouse/retail_ods.db/order_items

你会得到2个目录,抓取路径。

现在您已经有了每年的表和分区(针对您的情况)。现在您可以对每个数据库使用 sqoop import 命令从表中查询并复制到各自的分区中。

您可以找到示例 sqoop 命令 here .您甚至可以将查询作为 sqoop 导入命令的一部分传递(Google sqoop 用户指南)。

sqoop import \
--connect "jdbc:mysql://sandbox.hortonworks.com:3306/retail_db" \
--username=retail_dba \
--password=hadoop \
--table order_items \
--target-dir /apps/hive/warehouse/retail_ods.db/order_items/order_month=201301 \
--append \
--fields-terminated-by '|' \
--lines-terminated-by '\n' \
--outdir java_files

关于hadoop - 将多个数据库中的表导入 Hadoop 和 Union,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34220917/

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