【问题标题】:load multiple csv into one table by SQLLDR通过 SQLLDR 将多个 csv 加载到一个表中
【发布时间】:2013-07-01 12:59:32
【问题描述】:

我正在使用 SQL LOADER 在一张表中加载多个 csv 文件。 我发现的过程很简单,就像

LOAD
  DATA 
  INFILE '/path/file1.csv'
  INFILE '/path/file2.csv'
  INFILE '/path/file3.csv'
  INFILE '/path/file4.csv'
  APPEND INTO TABLE TBL_DATA_FILE
    EVALUATE CHECK_CONSTRAINTS
    REENABLE DISABLED_CONSTRAINTS
    EXCEPTIONS EXCEPTION_TABLE
  FIELDS TERMINATED BY "," 
  OPTIONALLY ENCLOSED BY '"'
  TRAILING NULLCOLS
  ( 
    COL0,
    COL1,
    COL2,
    COL3,
    COL4
  )

但我不想多次使用 INFILE,因为如果我有超过 1000 个文件,那么我必须在控制文件脚本中提及 1000 次 INFILE。

所以我的问题是:是否有任何其他方式(如任何循环/任何 *.csv)在不使用多个 infile 的情况下加载多个文件?

谢谢, 比通

【问题讨论】:

  • 文件有多大,你有空间存储它们 2x 吗?是否可以从数据库服务器访问这些文件?
  • 是的......文件是可访问的......我执行我的代码并成功加载......但我想知道是否有任何其他方式来加载数据...... .没有多次使用 INFILE...
  • 你能写一个脚本来生成这个文件吗?

标签: sql oracle sql-loader


【解决方案1】:

解决方案1:你能不能把这1000个文件拼接成一个大文件,然后由SQL*Loader加载。在 unix 上,我会使用类似的东西

cd path
cat file*.csv > all_files.csv

【讨论】:

    【解决方案2】:

    解决方案 2:使用外部表并使用 PL/SQL 过程加载数据:

    CREATE PROCEDURE myload AS
    BEGIN
      FOR i IN 1 .. 1000 LOOP
        EXECUTE IMMEDIATE 'ALTER TABLE xtable LOCATION ('''||to_char(i,'FM9999')||'.csv'')';
        INSERT INTO mytable SELECT * FROM xtable;
      END LOOP;
    END;
    

    【讨论】:

      【解决方案3】:

      您可以像这样使用通配符(? 表示单个字符,* 表示任意数字):

      infile 'file?.csv'
      

      ;)

      【讨论】:

      • 我尝试使用通配符“?”,但没有成功。 SQL*Loader-500: Unable to open file (/tmp/csv/?_act.csv) SQL*Loader-553: file not found SQL*Loader-509: System error: No such file or directory SQL*Loader-2026: the load was aborted because SQL Loader cannot continue.
      【解决方案4】:

      从 shell 中循环文件:

      #!/bin/bash
      for csvFile in `ls file*.csv`
      do
          ln -s $csvFile tmpFile.csv
          sqlldr control=file_pointing_at_tmpFile.ctl
          rm tmpFile.csv
      done
      

      【讨论】:

        【解决方案5】:
        OPTIONS (skip=1)
        LOAD DATA
        

        INFILE /export/home/applmgr1/chalam/Upload/*.csv

        REPLACE INTO TABLE XX_TEST_FTP_UP
        FIELDS TERMINATED BY ','
        TRAILING NULLCOLS
        (FULL_NAME,EMPLOYEE_NUMBER)
        

        是否检查所有CSV并加载数据

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多