Как создать вложенную таблицу в Hive для формата файла FIX

В моем исследовании мы используем формат протокола ( FIX 5.0 SP2) и данные ( CME DataMine). Но у меня возникают проблемы при создании таблицы для этих данных (вложенные таблицы). Например, основной формат сообщения задается сообщением № 1, начиная с (^A1128) и заканчивая (^ A10). Теперь в случае сообщения № 2 у нас есть одно и то же основное сообщение, начинающееся с (^A1128), и несколько сообщений, начинающихся с (^A1023) и заканчивающихся (^ A346).

        MSG#1                       MSG#2
---------------------------------------------------------------------
    ^A1128=9                ^A1128=9 
        ^A9=136                     ^A9=1417
        ^A35=X                      ^A35=X 
        ^A49=CME                    ^A49=CME 
        ^A34=578                    ^A34=731 
        ^A52=20130714180133577      ^A52=20130714190005961
        ^A75=20130715               ^A75=20130710 
        ^A268=1                     ^A268=15
        ^A279=0                     ^A279=0
        ^A22=8                      ^A22=8
        ^A48=111473                 ^A48=28112 
        ^A64=20130712               ^A83=2 
        ^A83=1                      ^A107=ESZ3
        ^A107=ESU4                  ^A269=0
        ^A269=6                     ^A270=166000
        ^A270=164350                ^A271=1 
        ^A273=180133000             ^A273=190005000
    ^A10=248                        ^A336=0
                                    ^A346=1
                                              ^A1023=1 
                                                   ^A279=0 
                                                   ^A22=8 
                                                   ^A48=28112 
                                                   ^A83=3 
                                                   ^A107=ESZ3
                                                   ^A269=0 
                                                   ^A270=165675 
                                                   ^A271=1 
                                                   ^A273=190005000
                                                   ^A336=0 
                                                   ^A346=1
                                      ...   ...   ...  ...
                                               ^A1023=5 
                                     ^A10=029

Данные поступают в виде последовательности строк без пробелов, и в конце сообщения есть символ (\ n). Что-то вроде этого,

^A1128=9^A9=157^A35=X^A49=CME^A34=406238^A52=20130715123719934^A75=20130715^A268=1^A279=1^A22=8^A48=28112^A83=49004^A107=ESZ3^A269=1^A270=166775^A271=186^A273=123719000^A336=2^A346=3^A1023=1^A10=210^A

Вот код, который я использую для создания таблицы в Hive без успеха.

        CREATE EXTERNAL TABLE fix_map
        (tag MAP<INT, STRING>)
        ROW FORMAT DELIMITED
        COLLECTION ITEMS TERMINATED BY '1'
        FIELDS TERMINATED BY '2'
        MAP KEYS TERMINATED BY '='
        LOCATION '/user/data/';

Любые предложения будут с благодарностью.

1 ответ

Я не нашел конкретного ответа на эти вопросы, я использовал другой подход для решения этой проблемы. Первое решение заключается в создании двух разных таблиц: одна для основного исправления msg, другая для вложенной части, а затем объединение двух таблиц. Я использовал этот код для создания первой таблицы:

        CREATE TABLE futures_fix(
          tag MAP<INT,STRING>
          )
        ROW FORMAT DELIMITED
        FIELDS TERMINATED BY '2'
        COLLECTION ITEMS TERMINATED BY '1'
        MAP KEYS TERMINATED BY '='
        LOCATION '/user/lcoation/data/';

Другой подход заключается в использовании инструмента fis2json (npm) из ( SunGard Labs). Эти ребята создали отличный инструмент для декодирования FIX в формат json ( fix2json). После того как вы расшифруете данные, у вас будет больше инструментов для работы с вложенными таблицами, а декодер fi2json изменит все теги на правильные имена! Вот пример вывода fix2json.

     {
        "ApplVerID":"FIX50SP2",
        "BodyLength":"136",
        "MsgType":"MARKETDATAINCREMENTALREFRESH",
        "SenderCompID":"CME",
        "MsgSeqNum":"578",
        "SendingTime":"20130714180133577",
        "TradeDate":"20130715",
        "NoMDEntries":"1",
        "MDEntries":[
           {
              "MDUpdateAction":"NEW",
              "SecurityIDSource":"EXCHANGE SYMBOL",
              "SecurityID":"111473",
              "SettlDate":"20130712",
              "RptSeq":"1",
              "SecurityDesc":"ESU4",
              "MDEntryType":"SETTLEMENT PRICE",
              "MDEntryPx":"164350",
              "MDEntryTime":"180133000"
           }
        ],
        "CheckSum":"248"
     }
Другие вопросы по тегам