U-SQL 根据序号位置提取列
U-SQL extract a column based on its ordinal position
我正在试验 Azure Data Lake,并尝试使用大量数据文件。
这些文件是 CSV 文件。文件夹结构如下:
/jobhistory/(AccountId)/(JobId)/*.csv
在 CSV 文件中,第 6 列是 username
。
我想做的是提取帐户 ID、工作 ID 和用户名(然后,为了进行实验,对这些数据进行一些汇总)。
按照在线教程,我写了这样的东西:
DECLARE @file_set_path = "/jobhistory/{AccountId}/{JobId}/{FileName}.csv";
@metadata =
EXTRACT AccountId int,
JobId string,
FileName string,
UserName string
FROM @file_set_path
USING Extractors.Csv();
现在,我遇到的问题(我认为)是 UserName
字段是 csv 文件中的第 6 列,但文件中没有 header 行。
如何将 UserName
分配给文件中的第 6 列?
此外,如果我完全走错了路,请告诉我;这和我习惯的很不一样。
内置的CSV
提取器是一个位置提取器。这意味着您必须在提取模式中指定所有列(即使是您不感兴趣的列)。
所以你会这样写(假设用户名是第 6 列,而你有 10 列):
DECLARE @file_set_path = "/jobhistory/{AccountId}/{JobId}/{FileName}.csv";
@metadata =
EXTRACT AccountId int,
JobId string,
FileName string,
c1 string, c2 string, c3 string, c4 string, c5 string,
UserName string,
c7 string, c8 string, c9 string
FROM @file_set_path
USING Extractors.Csv();
@metadata =
SELECT AccountId,
JobId,
FileName,
UserName
FROM @metadata;
请注意,SELECT
投影将被推入 EXTRACT
,因此它不会对您不 select 的列进行完整的列处理。
如果您知道第 6 列是您感兴趣的列,您还可以编写一个自定义提取器来跳过其他列。然而,与内置提取器相比,运行 自定义提取器的权衡可能不值得。
(另请注意,您可以使用 ADL 工具创建 EXTRACT
表达式(没有虚拟列),因此您无需手动执行:
我正在试验 Azure Data Lake,并尝试使用大量数据文件。
这些文件是 CSV 文件。文件夹结构如下:
/jobhistory/(AccountId)/(JobId)/*.csv
在 CSV 文件中,第 6 列是 username
。
我想做的是提取帐户 ID、工作 ID 和用户名(然后,为了进行实验,对这些数据进行一些汇总)。
按照在线教程,我写了这样的东西:
DECLARE @file_set_path = "/jobhistory/{AccountId}/{JobId}/{FileName}.csv";
@metadata =
EXTRACT AccountId int,
JobId string,
FileName string,
UserName string
FROM @file_set_path
USING Extractors.Csv();
现在,我遇到的问题(我认为)是 UserName
字段是 csv 文件中的第 6 列,但文件中没有 header 行。
如何将 UserName
分配给文件中的第 6 列?
此外,如果我完全走错了路,请告诉我;这和我习惯的很不一样。
内置的CSV
提取器是一个位置提取器。这意味着您必须在提取模式中指定所有列(即使是您不感兴趣的列)。
所以你会这样写(假设用户名是第 6 列,而你有 10 列):
DECLARE @file_set_path = "/jobhistory/{AccountId}/{JobId}/{FileName}.csv";
@metadata =
EXTRACT AccountId int,
JobId string,
FileName string,
c1 string, c2 string, c3 string, c4 string, c5 string,
UserName string,
c7 string, c8 string, c9 string
FROM @file_set_path
USING Extractors.Csv();
@metadata =
SELECT AccountId,
JobId,
FileName,
UserName
FROM @metadata;
请注意,SELECT
投影将被推入 EXTRACT
,因此它不会对您不 select 的列进行完整的列处理。
如果您知道第 6 列是您感兴趣的列,您还可以编写一个自定义提取器来跳过其他列。然而,与内置提取器相比,运行 自定义提取器的权衡可能不值得。
(另请注意,您可以使用 ADL 工具创建 EXTRACT
表达式(没有虚拟列),因此您无需手动执行: