sql >> データベース >  >> RDS >> Oracle

Pysparkを使用して巨大なcsvファイルをOracleデータベーステーブルにロードします

    非常に大きなファイル(毎日1億2000万レコード)をロードするために使用する制御ファイルの例を示します。

    OPTIONS (SKIP=0, ERRORS=500, PARALLEL=TRUE, MULTITHREADING=TRUE, DIRECT=TRUE, SILENT=(ALL))
    UNRECOVERABLE
    LOAD DATA
    CHARACTERSET WE8ISO8859P1
    INFILE '/path_to_your_file/name_of_the_file.txt'
    BADFILE '/path_to_your_file/name_of_the_file.bad'
    DISCARDFILE '/path_to_your_file/name_of_the_file.dsc'
    APPEND
    INTO TABLE yourtablename
    TRAILING NULLCOLS
    (
    COLUMN1 POSITION(1:4) CHAR
    ,COLUMN2 POSITION(5:8)  CHAR
    ,COLUMN3 POSITION(9:11) CHAR
    ,COLUMN4 POSITION(12:18) CHAR
    ....
    ....)
    

    いくつかの考慮事項

    • 区切り文字を使用するよりも、位置による読み込みが常に高速です
    • PARALLELのオプションを使用します 、MULTITHREADING およびDIRECT 読み込みパフォーマンスを最適化するため。
    • UNRECOVERABLE データベースを回復する必要がある場合に備えて、常にファイルがある場合は、データを再度ロードする必要がある場合にも、良いアドバイスです。
    • 適切な文字セットを使用してください。
    • TRAILING NULLCOLS句は、レコードに存在しない相対位置の列をnull列として扱うようにSQL*Loaderに指示します。
    • 位置とは、各行に区切り文字のないデータが含まれていることを意味します。したがって、テーブル内の各フィールドの位置は長さでわかります。

    AAAAABBBBBBCCCCC19828733UUUU

    • txtファイルまたはcsvファイルにフィールド区切り文字(セミコロンなど)がある場合は、FIELDS DELIMITED BYを使用する必要があります。

    これは、制御ファイル(通常は拡張子がctlのテキストファイル)に保存されます。次に、コマンドラインから呼び出します

    sqlldr userid=youuser/[email protected]_string control=/path_to_control_file/control_file.ctl
    



    1. タイプ[java.lang.Object[]]からタイプ[@org.springframework.data.jpa.repository.Queryへの変換に失敗しました

    2. pgAdminでER図を作成する

    3. PDOプリペアドステートメントを使用して複数の行を挿入します

    4. MySQL ORDER BY DESCは高速ですが、ASCは非常に低速です