Я тоже боролся с этим, вот мое решение. Обратите внимание, что я не эксперт в 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. Нам нужен файл yaml, который можно передать в gpfdist, я назвал его transform.yaml Content:
---
VERSION: 1.0.0.1
TRANSFORMATIONS:
add_filename:
TYPE: input
CONTENT: data
COMMAND: /bin/bash transform.sh %filename%
Обратите внимание, что здесь у нас есть значение %filename%. Кажется, что gpfdist предварительно фильтрует файлы, которые необходимо обработать, и передает их 1 за 1 нашему преобразованию.
Запустим 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 папки, чтобы посмотреть, как он отреагирует, если файлы не находятся в той же папке, что и преобразование. Таким образом, я могу различать два файла, даже если их данные идентичны.
person
Balazs Gunics
schedule
03.03.2016