如何在配置单元中为修复文件格式创建嵌套表

ssm49v7z  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(382)

在我的研究中,我们使用的是(fix5.0sp2)协议格式和(cme数据挖掘)数据。但是我在为这些数据创建表(嵌套表)时遇到了问题。例如,基本消息格式由msg#1给出,从(^a1128)开始,到(^a10)结束。现在,对于msg#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

下面是我用来在配置单元中创建表但没有成功的代码。

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/';

如有任何建议,将不胜感激。

eqzww0vc

eqzww0vc1#

我没有找到这个问题的具体答案我用了不同的方法来解决这个问题。第一种解决方案是创建两个不同的表,一个用于主部件,另一个用于嵌套部件,然后连接两个表。我使用以下代码创建第一个表:

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/';

另一种方法是使用(sungard实验室)的fis2json(npm)工具,这个家伙创建了一个很好的工具来解码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"
     }

相关问题