【问题标题】:SQL Loader to load multiple tables from CSV input fileSQL Loader 从 CSV 输入文件加载多个表
【发布时间】:2016-12-09 22:15:31
【问题描述】:

我正在尝试加载一个 CSV 文件,其中每行数据都加载到两个 table(TAB1,TAB2) 中。 对于 CSV 文件中的每一行数据,TAB1 中将加载一行,第二个表中将加载多行。

CSV 文件中的数据行示例:

Data_col1,Data_col2,Data_col3,Data_col4   , Key_name1, Key_value1 , Key_name2, Key_value2 ,Key_name3, Key_value3 ,.................

我希望这些数据出现在如下表格中:

     Tab1
     ====
   Data_col1
   Data_col2
   Data_col3
   Data_col4 

   Tab2  ( Load data in TAB2 until the end of the data row1)                    
      record 1 ==> Key_name1, Key_value1
      record 2 ==> Key_name2, Key_value2
      record 3 ==> Key_name3, Key_value3

我做了一些研究,但无法解决这个问题。 请帮我解决这个问题。

【问题讨论】:

  • 在您的示例中,是否总是有 4 个 data_cols 和未知数量的键名/值对?如果您编辑帖子并在处理完这些行之后在末尾添加几个实际数据行和示例表以阐明您正在使用的内容,这将很有帮助。

标签: oracle sql-loader


【解决方案1】:

先加载到单个导入表中,然后使用脚本处理数据并将数据加载到两个表中如何?

【讨论】:

    【解决方案2】:

    通常情况下,这样的情况需要在加载之前对文件进行预处理以拆分记录,或者像@MercyfulGPF 建议的那样,加载到临时表并运行一个过程来将行处理到它们的表中(这将是我首选的方法,因为它可以让您更好地控制流程,并且您可以处理可变数量的键名/值对)。

    但是,如果您有固定数量的元素并且您不介意维护噩梦,您可以完成您的要求。使用多个“INTO TABLE”部分构造您的控制文件,其中第一个字段从位置(1)开始。这会强制 sqlldr 将其内部指针移回每个 INTO 表部分的行首,为每个部分插入一个新行。每个部分都将之前插入的字段定义为 FILLER,以便跳过它们(确保它们的名称与表列不同)。但是,如果您的示例所暗示的 key_name/value 对的数量可变,则它将不起作用。因此,这可能只是部分解决方案,但可能会给您一些可能(或不可能)的想法。

    LOAD DATA
    infile datafile.csv 
    TRUNCATE
    
    INTO TABLE tab1
    fields terminated by ','
    ( 
     data_col
    )
    
    INTO TABLE tab1
    fields terminated by ','
    ( 
     filler1 FILLER position(1)
    ,data_col
    )
    
    INTO TABLE tab1
    fields terminated by ','
    ( 
     filler1 FILLER position(1)
    ,filler2 FILLER
    ,data_col
    )
    
    INTO TABLE tab1
    fields terminated by ','
    ( 
     filler1 FILLER position(1)
    ,filler2 FILLER
    ,filler3 FILLER
    ,data_col
    )
    
    INTO TABLE tab2
    fields terminated by ','
    ( 
     filler1 FILLER position(1)
    ,filler2 FILLER
    ,filler3 FILLER
    ,filler4 FILLER
    ,key_name
    ,key_value
    )
    
    INTO TABLE tab2
    fields terminated by ','
    ( 
     filler1 FILLER position(1)
    ,filler2 FILLER
    ,filler3 FILLER
    ,filler4 FILLER
    ,filler5 FILLER
    ,filler6 FILLER
    ,key_name
    ,key_value
    )
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      相关资源
      最近更新 更多