Настройка парсера
Содержание:
- Преобразование HTML
- Преобразование XML
- Преобразование JSON
- Преобразование плоского текста
- Преобразование CSV
Преобразование HTML
gsqlcmd позволяет извлекать данные из таблиц HTML.
Вы можете извлечь данные требуемой таблицы, используя опцию /rootPath.
Например, вы можете загрузить дивиденды с веб-сайта nasdaq.com:
gsqlcmd download http://www.nasdaq.com/symbol/aapl/dividend-history aapl.htm
Затем получить доступные таблицы с помощью команды:
gsqlcmd show-html-tables aapl.htm tables.htm /openOutput
Полученный файл table.htm содержит примерно такие данные:
Можно видеть, что дивиденды находятся в таблице 3.
Соответственно, используйте команду для преобразования загруженного файла, подобную этой:
gsqlcmd convert aapl.htm dividends.csv /rootPath=3 /quoteChar=
или вот так, чтобы извлечь данные непосредственно с веб-страницы:
gsqlcmd convert http://www.nasdaq.com/symbol/aapl/dividend-history dividends.csv /rootPath=3 /quoteChar=
Полученный файл дивидендов.csv будет содержать примерно следующие данные:
ExEffDate;Type;CashAmount;DeclarationDate;RecordDate;PaymentDate 2019-02-08;Cash;0.73;2019-01-29;2019-02-11;2019-02-14 2018-11-08;Cash;0.73;2018-11-01;2018-11-12;2018-11-15 2018-08-10;Cash;0.73;2018-07-31;2018-08-13;2018-08-16 2018-05-11;Cash;0.73;2018-05-01;2018-05-14;2018-05-17 2018-02-09;Cash;0.63;2018-02-01;2018-02-12;2018-02-15
gsqlcmd в большинстве случаев определяет правильную таблицу автоматически.
Т.е., вначале стоит попробовать более простую команду с автоматическим определением:
gsqlcmd convert aapl.htm dividends.csv
Если страница содержит сразу несколько таблиц с нужными данными, примените режим convert для каждой таблицы.
Если таблицы имеют одинаковую структуру, укажите несколько индексов таблиц в опции /rootPath через запятую, например /rootPath=20,21,22.
Если таблица не содержит заголовков, используйте опцию /noSourceHeaders. В этом случае gsqlcmd добавит столбцы с именами типа F1, F2 и т.д.
Преобразование XML
gsqlcmd позволяет извлекать табличные данные из иерархических файлов XML.
В большинстве случаев gsqlcmd автоматически определяет нужные данные.
Однако вы можете использовать опцию /rootPath и другие параметры парсера для настройки.
Например, test.xml имеет следующее содержимое:
<?xml version="1.0" encoding="utf-8"?> <root> <parent> <row id="1"><f1>data11</f1><f2>data12</f2></row> <row id="2"><f1>data21</f1><f2>data22</f2></row> <row id="3"><f1>data31</f1><f2>data32</f2></row> </parent> </root>
Базовая команда convert выглядит следующим образом:
gsqlcmd convert test.xml test.csv
Полученный файл test.csv будет иметь следующее содержимое:
id;"f1";"f2" 1;"data11";"data12" 2;"data21";"data22" 3;"data31";"data32"
gsqlcmd выбирает "лучший" корень данных.
Эта команда эквивалентна следующей:
gsqlcmd convert test.xml test.csv /rootPath=root.parent.row
Вы можете изменить корневой путь для получения данных с указанного узла.
Например:
gsqlcmd convert test.xml test.csv /rootPath=root.parent
Результат будет следующий:
row_id;"row_f1";"row_f2" 1;"data11";"data12" 2;"data21";"data22" 3;"data31";"data32"
Вы можете использовать опцию /quoteChar для удаления кавычек.
Например:
gsqlcmd convert test.xml test.csv /rootPath=root.parent /quoteChar= row_id;row_f1;row_f2 1;data11;data12 2;data21;data22 3;data31;data32
Используйте режим show-roots для отображения корневых узлов.
Например:
gsqlcmd show-roots test.xml root root.parent root.parent.row root.parent.row.id root.parent.row.f1 root.parent.row.f2
Посмотрите также на следующие параметры, которые позволяют настроить парсер:
/attributedColumns=<col>.<attr>[;...] /collapsedNodes=<node>[;...] /ignoredTags=<tag>[;...] /keptNodes=<node>[;...] /requiredColumns=<name>[;...] /skippedNodes=<node>[;...]
Например, вы можете пропустить некоторые узлы, используя опцию /skippedNodes:
gsqlcmd convert test.xml test.csv /quoteChar= /skippedNodes=f2 id;f1 1;data11 2;data21 3;data31
Преобразование JSON
Преобразование JSON аналогично XML, поскольку оба формата имеют иерархическую структуру.
Например, test.json имеет следующее содержимое:
{"root": {"parent":[ {"id":1,"f1":"data11","f2":"data12"}, {"id":2,"f1":"data21","f2":"data22"}, {"id":3,"f1":"data31","f2":"data32"} ] }
Базовая команда convert возвращает следующее:
gsqlcmd convert test.json test.csv Id;"F1";"F2" 1;"data11";"data12" 2;"data21";"data22" 3;"data31";"data32"
Синтаксический анализатор JSON делает первые буквы имен столбцов заглавными.
Используйте режим show-roots для отображения корневых узлов.
Например:
gsqlcmd show-roots test.json root root.parent root.parent.row root.parent.row.id root.parent.row.f1 root.parent.row.f2
Вы можете выбрать необходимые данные с помощью опции /rootPath.
Например:
gsqlcmd convert test.json test.csv /rootPath=root /quoteChar= Parent_id;Parent_f1;Parent_f2 1;data11;data12 2;data21;data22 3;data31;data32
Анализатор JSON поддерживает вывода для нескольких корневых узлов. Например:
gsqlcmd convert test.json test.csv /rootPath=root.parent.f1,root.parent.f2 /quoteChar= F1;F2 data11;data12 data21;data22 data31;data32
Вы можете использовать * вместо узлов. Например:
gsqlcmd convert test.json test.csv /rootPath=*.*.f1,*.*.f2 /quoteChar=
Вы можете найти множество готовых к использованию примеров в папке Downloading and converting to CSV загруженного пакета gsqlcmd.
Также обратите внимание на следующие опции, которые позволяют настроить парсер:
/keptNodes=<node>[;...] /requiredColumns=<name>[;...] /skippedNodes=<node>[;...]
Преобразование плоского текста
gsqlcmd позволяет получать данные из плоских текстовых файлов, если текст позволяет обнаружить столбцы, как например:
id f1 f2 1 data11 data12 2 data21 data22 3 data31 data32
Используйте команду convert для извлечения данных:
gsqlcmd convert test.txt test.csv
Полученный файл test.csv содержит следующее:
id;"f1";"f2" 1;"data11";"data12" 2;"data21";"data22" 3;"data31";"data32"
Обратите внимание, что вы также можете использовать текстовые драйверы Microsoft ODBC и OLE DB для выбора и преобразования текстовых данных.
На начальном этапе обновите файл schema.ini с помощью команды make-ini:
gsqlcmd make-ini test.txt schema.ini
Затем используйте команду exec для выборки данных:
gsqlcmd exec test.txt "SELECT * FROM test.txt" test.csv
В таких командах можно использовать функции SQL, поддерживаемые драйвером, такие, как WHERE или GROUP.
Преобразование CSV
gsqlcmd позволяет извлекать данные из файлов CSV и преобразовывать их в любой поддерживаемый выходной формат.
Обратите внимание на следующие полезные параметры форматирования:
/add=<header>=<value | function>[;...] /addRowNum /dateFormat=<format> /dateTimeFormat=<format> /escapeChar=<char> /noBOM /outputCodepage=<codepage> /outputCulture=<name> /[outputFormat=]asText | asTxt | asCsv | asHtm | asHtml | asXml | asJson /[[output]Separator](formatting-options.htm#option-outputSeparator)=<separator> | Tab /quoteChar=<char> /rowNumBase=<integer> /timeFormat=<format>
Например, вы можете использовать следующую команду, чтобы добавить новые столбцы, такие как "Symbol" и "Date", и преобразовать выходной файл в кодировку UTF-8.
gsqlcmd convert test.csv test-65001.csv /outputEncoding=65001 /add=Symbol=AAPL;Date=Date()
Обратите внимание, что вы также можете использовать текстовые драйверы Microsoft ODBC и OLE DB для выбора и преобразования данных CSV.
На начальном этапе обновите файл schema.ini с помощью команды make-ini:
gsqlcmd make-ini test.csv schema.ini
Затем используйте команду exec для выборки данных:
gsqlcmd exec test.csv "SELECT 'AAPL' AS Symbol, :date AS [Date], * FROM test.csv" output.csv /set=date=Date()
В таких командах можно использовать функции SQL, поддерживаемые драйвером, такие, как WHERE или GROUP.