如何使用 luigi 以 orc 格式将输出写入分区 table?
How to write output to partitioned table with orc format with luigi?
假设我们有这样的工作:
class MRjob(JobTask):
def output(self):
return ...
def requires(self):
return ...
def mapper(self, line):
# some line process
yield key, (...information, stored in hashable type...)
def reducer(self,key,values):
# some reduce logic... for example this
unique = set(values)
for elem in unique:
yield key, elem[0], elem[1]
我应该在输出方法中做什么才能将数据插入现有的 table 分区(而且 table 是以 orc 格式存储的)?我想跳过将数据转换为 orc 的过程,因此我尝试
return HivePartitionTarget(self.insert_table, database=self.database_name, partition=partition)
但这没有用。我还发现 luigi 试图将输出传递给某个文件。使用 HivePartitionTarget luigi returns 错误,如 'object has no attribute write',所以我的假设是 HivePartitionTarget 不包含写入方法。因此,我认为我做错了什么,应该使用另一种方法,但没有找到一个例子
我不太清楚如何在 luigi
中实现这一点。我可能建议的是使用简单的方法以正常分隔格式(例如逗号分隔格式)编写 luigi
脚本的输出。
在此基础上创建一个外部配置单元 table:
CREATE EXTERNAL TABLE temp_table(
<col_name> <col_type>,
<col_name2> <col_type>
.......
.......
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘,’
LOCATION ‘ /hive/data/weatherext’;
使用简单的配置单元 insert-into-select
查询将数据插入原始 table(具有 ORC 格式数据)。
INSERT INTO TABLE target_table
PARTITION( xxx )
SELECT
COL_NAME1,
COL_NAME2
FROM temp_table;
您的目标 table 将拥有 ORC 格式的数据,而 hive 将为您处理转换。
假设我们有这样的工作:
class MRjob(JobTask):
def output(self):
return ...
def requires(self):
return ...
def mapper(self, line):
# some line process
yield key, (...information, stored in hashable type...)
def reducer(self,key,values):
# some reduce logic... for example this
unique = set(values)
for elem in unique:
yield key, elem[0], elem[1]
我应该在输出方法中做什么才能将数据插入现有的 table 分区(而且 table 是以 orc 格式存储的)?我想跳过将数据转换为 orc 的过程,因此我尝试
return HivePartitionTarget(self.insert_table, database=self.database_name, partition=partition)
但这没有用。我还发现 luigi 试图将输出传递给某个文件。使用 HivePartitionTarget luigi returns 错误,如 'object has no attribute write',所以我的假设是 HivePartitionTarget 不包含写入方法。因此,我认为我做错了什么,应该使用另一种方法,但没有找到一个例子
我不太清楚如何在 luigi
中实现这一点。我可能建议的是使用简单的方法以正常分隔格式(例如逗号分隔格式)编写 luigi
脚本的输出。
在此基础上创建一个外部配置单元 table:
CREATE EXTERNAL TABLE temp_table(
<col_name> <col_type>,
<col_name2> <col_type>
.......
.......
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘,’
LOCATION ‘ /hive/data/weatherext’;
使用简单的配置单元 insert-into-select
查询将数据插入原始 table(具有 ORC 格式数据)。
INSERT INTO TABLE target_table
PARTITION( xxx )
SELECT
COL_NAME1,
COL_NAME2
FROM temp_table;
您的目标 table 将拥有 ORC 格式的数据,而 hive 将为您处理转换。