Greenplum:获取通过外部表处理的文件名
Posted
技术标签:
【中文标题】Greenplum:获取通过外部表处理的文件名【英文标题】:Greenplum : Getting filenames processed via an external table 【发布时间】:2015-12-11 06:27:11 【问题描述】:我们正在使用外部表处理多个文件。有什么办法可以让我在外部表中处理文件名并将其存储在数据库表中?
我能找到的唯一解决方法是将文件名附加到平面文件中的每条记录中,这在大型数据集和多个文件时并不理想。
谁能帮忙解决这个问题
谢谢
【问题讨论】:
【参考方案1】:不,文件名根本不会从 gpfdist 守护进程传回 Greenplum。所以你必须将文件名附加到每一行 - 你可以使用 gpfdist 转换来这样做
【讨论】:
谢谢,我在处理之前已经附加了文件名,只解决来自源的大量文件并花费大量时间编辑这些文件 您无需手动执行此操作 - 使用 gpfdist 转换您可以在飞行中完成此操作,即您无需编辑文件。以下是它的工作方式:pivotalguru.com/?p=871 这里还有一个带有描述的链接:gpdb.docs.pivotal.io/4340/admin_guide/load/topics/…【参考方案2】:我也在为此苦苦挣扎,这是我的解决方案。请注意,我不是 linux 专家,所以可能有一个单一的解决方案。
所以我想在我的记录前面添加一个文件名列。
这可以在sed中完成,我创建了一个transform.sh文件,内容如下:
#/bin/sh
filename=$1
#echo $filename >> transform.txt
sed -e "s|^|$filename\v|" $filename
请注意,我使用垂直制表符作为分隔符,\v。同样在文件名中,您可以拥有 / 因此使用 | .为了获得 $filename 的值,我们必须对 sed 使用双精度。
测试一下,看起来不错。
./transform.sh countersamples-2016-03-02--11-51-10.csv
countersamples-2016-03-02--11-51-10.csv
timestamp
machine
category
instance
name
value
countersamples-2016-03-02--11-51-10.csv
2016-03-02 11:51:10.064
DESKTOP-4PLQKVL
Memory
% Committed Bytes In Use
74.8485488891602
这部分已经完成,让我们继续 gpfdist。我们需要一个可以传递给 gpfdist 的 yaml 文件,我将其命名为 transform.yaml 内容:
---
VERSION: 1.0.0.1
TRANSFORMATIONS:
add_filename:
TYPE: input
CONTENT: data
COMMAND: /bin/bash transform.sh %filename%
请注意,我们这里有 %filename% 值。似乎 gpfdist 对需要处理的文件进行了预过滤,并将它们一一传递给我们的转换。
让我们启动 gpfdist:
gpfdist -c transform.yaml -v
现在进入greenplum并创建一个外部表,例如:
CREATE READABLE EXTERNAL TABLE "ext_transform"
(
"filename" text,
"timestamp" timestamp without time zone ,
"machine" text ,
"category" text ,
"instance" text ,
"name" text ,
"value" double precision
)
LOCATION ('gpfdist://localhost:8080/*/countersamples*.csv#transform=add_filename')
FORMAT 'TEXT'
( HEADER DELIMITER '\013' NULL AS '\\N' ESCAPE AS '\\' )
当我们从中选择数据时:
select * from "ext_transform";
我们看到:
我创建了 2 个文件夹,以查看如果文件与转换不在同一个文件夹中,它会如何反应。这样我就可以区分这两个文件,即使它们的数据相同。
【讨论】:
感谢回复,很有帮助以上是关于Greenplum:获取通过外部表处理的文件名的主要内容,如果未能解决你的问题,请参考以下文章
在greenplum pxf外部表中,从对象的json数组中获取元素时获取空字符串
Greenplum 实时数据仓库实践——Greenplum监控与运维