web-dev-qa-db-ja.com

MySQL:csvファイルをmysqlにロードします

MySQL WorkbenchでcsvファイルをMySQL 5.7にロードするときに問題が発生します。

データの例

ESH13   1/2/2013    10:04:35    1451    1
ESH13   1/2/2013    10:04:35    1451.25 2
ESH13   1/2/2013    10:04:35    1451    1
ESH13   1/2/2013    10:04:35    1451    1
ESH13   1/2/2013    10:04:36    1451    1
ESH13   1/2/2013    10:04:36    1451    2

元々、この[下]メソッドを使用して開始しようとしました:

SHOW VARIABLES LIKE "secure_file_priv"; 

CREATE TABLE es (
    id INT NOT NULL AUTO_INCREMENT,
    ticker VARCHAR(255) NOT NULL,
    date DATE NOT NULL,
    time DECIMAL(10 , 2 ) NULL,
    price DECIMAL(10 , 2 ) NULL,
    vol DECIMAL(10 , 2 ) NULL,
    PRIMARY KEY (id)
);

LOAD DATA INFILE 'C:\Users\YCM LLC\Desktop\HFT\ES_test.csv'
INTO TABLE es_test1
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

上記の実行時にこのエラーが発生します:

  • エラーコード:1290。MySQLサーバーは--secure-file-privオプションで実行されているため、このステートメントを実行できません。

以下のようにステートメントをブロックしてC:\ProgramData\MySQL\MySQL Server 5.7\my.iniを変更しようとしましたが、変更を保存しようとすると「Access is denied」が表示されます。

# Secure File Priv.
# secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.7/Uploads"

次に、LOAD DATA INFILEステートメントで「ローカル」キーワードを使用しようとしました:

    LOAD DATA local INFILE 'C:\Users\YCM LLC\Desktop\HFT\ES_test.csv'
    INTO TABLE es_test1
    FIELDS TERMINATED BY ',' 
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n';

上記の実行時にこのエラーが発生します:

エラーコード:2.ファイル「C:UsersYCM LLCDesktopHFTES_test.csv」が見つかりません(エラーコード:2-そのようなファイルまたはディレクトリはありません)


[a]コメントで質問に回答した人からのアドバイスに従って調整を行った後、データをロードすることができましたが、時間文字列データをテーブルにロードできなくなりました

CREATE TABLE es (
    ticker VARCHAR(255) NOT NULL,
    xdate DATE NOT NULL,
    time Time NULL,
    price DECIMAL(10 , 2 ) NULL,
    vol DECIMAL(10 , 2 ) NULL
   );

LOAD DATA local INFILE 'C:\\Users\\YCM LLC\\Desktop\\HFT\\ES_test.csv'
INTO TABLE es
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(ticker, @var1, @var2, price, vol) 
SET xdate = STR_TO_DATE(@var1, '%m/%d/%Y'),
    time = STR_TO_DATE(@var2, '%hh:%mm:%ss');

上記の実行時にこのエラーが発生します:

影響を受ける6行、6警告:1411関数str_to_dateの不正な日時値:'10:04:35 '1411関数str_to_dateの不正な日時値:'10:04:35' 1411不正な日時値:'10関数str_to_date 1411の:04:35 '不正な日時値:関数の'10:04:35'

2
user2392398

MySQLでデータをロードするときの問題LOAD DATA INFILE

ここでいくつかの問題が発生しているようです。解決するには、いくつかの調整を行って、データをエラーなしで読み込むことができます。

以下で詳細を参照し引用してソースを示したので、より詳細な説明について各項目を読むことができます。

簡単に言えば、基本的には次のことができます:

  1. LOAD DATA INFILE ステートメントでLOCALキーワードを使用して、my.iniファイルパラメータを調整する必要なく、MySQLでロードするデータを取得します。

    • LOAD DATA LOCAL INFILE '<file>'
  2. 最初のバックスラッシュをエスケープするには、1つではなく2つのバックスラッシュ[\\]をフォルダーパスで個別のフォルダーに使用します。デフォルトでは、単一のバックスラッシュが特殊なエスケープ文字として使用され、単独で使用すると無視されます。

    • C:\\Users\\YCM LLC\\Desktop\\HFT\\ES_test.csv
  3. STR_TO_DATE 関数を2番目の引数に渡し、最初の引数の時間値の形式を伝えて、%h:%i:%sまたは%H:%i:%s形式を使用する必要があります

    • time = STR_TO_DATE(@var2, '%h:%i:%s');

その他の参考資料

  1. LOCALキーワードは、後で説明するように、ファイルの予想される場所とエラー処理に影響します。 LOCALは、サーバーとクライアントの両方が許可するように構成されている場合にのみ機能します。たとえば、 mysqldlocal_infileシステム変数を無効にして起動された場合、LOCALは機能しません。 セクション6.1.6、「LOAD DATA LOCALのセキュリティ問題」 を参照してください。

    LOCALキーワードは、ファイルが見つかると予想される場所に影響します。

    • LOCALが指定されている場合、ファイルはクライアントホスト上のクライアントプログラムによって読み取られ、サーバーに送信されます。正確な場所を指定するために、ファイルに絶対パス名を指定できます。相対パス名として指定した場合、名前は、クライアントプログラムが起動されたディレクトリを基準にして解釈されます。

      LOCALLOAD DATAとともに使用すると、ファイルのコピーがサーバーの一時ディレクトリに作成されます。これは、tmpdirまたはslave_load_tmpdirの値によって決定されるディレクトリではなく、オペレーティングシステムの一時ディレクトリであり、MySQLサーバーでは構成できません。 (通常、システムの一時ディレクトリーは、Linuxシステムでは/tmp、WindowsではC:\WINDOWS\TEMPです。)このディレクトリーにコピー用の十分なスペースがないと、LOAD DATA LOCALステートメントが失敗する可能性があります。

    ソース


  1. 文字列内では、NO_BACKSLASH_ESCAPES SQLモードが有効になっていない限り、特定のシーケンスには特別な意味があります。これらのシーケンスはそれぞれ、エスケープ文字と呼ばれるバックスラッシュ(\)で始まります。 MySQLは、 表9.1「特殊文字のエスケープシーケンス」 に示すエスケープシーケンスを認識します。他のすべてのエスケープシーケンスでは、バックスラッシュは無視されます。つまり、エスケープされた文字は、エスケープされなかったかのように解釈されます。

    表9.1特殊文字のエスケープシーケンス

    エスケープシーケンス:\\

    シーケンスで表される文字:バックスラッシュ(\)文字

    ソース


  1. 説明

    MySQLのSTR_TO_DATE関数は文字列を受け取り、フォーマットマスクで指定された日付を返します。

    構文

    MySQLのSTR_TO_DATE関数の構文は次のとおりです。

    STR_TO_DATE( string, format_mask )

    パラメータまたは引数

    string

    日付としてフォーマットする文字列値。

    format_mask

    文字列に適用するフォーマット。以下は、format_maskパラメーターのオプションのリストです。これらのパラメーターは多くの組み合わせで使用できます。

    enter image description here

    ショートリスト

    値:%H

    説明:時間(00から23)

    値:%h

    説明:時間(00から12)

    値:%i

    説明:分(00から59)

    値:%s

    説明:秒(00から59)

    ソース

1
Pimp Juice IT