66889


### 環境

  * AuroraMySQL 5.6.10a (provisioned)
  * ap-northeast-1

以下のテーブルがあったとします。

[code]

    create table Person (
        id varchar(2) NOT NULL,
        name varchar(10) NOT NULL,
        age int
    ) engine=InnoDB
    
    
[/code]

以下のようにデータ挿入されているとします。

[code]

    | id | name | age  |
    | 01| test1 | Null | ← 文字列で'Null'ではなく実際のNull
    | 02| test2 | 25   |
    | 03| test3 | 34   |
    
[/code]

以下の条件でテキストデータを出力する方法を考えております。

  * 数値列はダブルクォーテーションで囲まない (int,decimal,double,float等々) 
  * 文字列はダブルクォーテーションで囲む (char,varchar,text等々) 
  * Nullはダブルクォーテーションで囲む

[code]

    ・例）
    
    "01","test1",""  ← Nullの場合はダブルクォーテーションで囲む
    "02","test2",25  ← Null出ない場合、その値をセット。
    "03","test3",34
    
[/code]

上記条件にあてはまるようなテキストファイルを出力するSQLクエリを以下のように作成しましたが、うまく行きませんでした。

[code]

    ・SQLクエリ１(IFNULLによるNULL値を''に置き換え)
    
    SELECT id,name,IFNULL(age,'') FROM Person INTO OUTFILE S3 's3uri' 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    LINES TERMINATED BY '\n';
    
    ・出力ファイルの内容１
    "01","test1",""  
    "02","test2","25" ← null以外もダブルクォーテーションで囲まれてしまう。
    "03","test3","34"
    
    
    ・SQLクエリ2(IFNULLなし)
    
    SELECT id,name,age FROM Person INTO OUTFILE S3 's3uri' 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    LINES TERMINATED BY '\n';
    
    ・出力ファイルの内容2
    "01","test1",\N ← nullが\Nの形式で出力される。
    "02","test2",25 
    "03","test3",34
    
    
[/code]

条件にあてはまるようなSELECT * INTO OUTFILE S3のクエリの定義の仕方はございますでしょうか？


CC BY-SA 4.0
2020-05-22T06:17:50.100
66876
2020-05-22T12:24:37.073
40265
question
mysql aws sql csv amazon-s3
AmazonAuroraMySQLの「SELECT * INTO OUTFILE S3」での出力ファイルでNULL値と数値の上手い処理の仕方について


強引な方法ですが、`ENCLOSED BY ''`とし、引用符を明示的に付加すれば、お望みの出力が得られます。

**【SQL】**

[code]

    SELECT
      CONCAT("""",id,""""),
      CONCAT("""",name,""""),
      (CASE WHEN age IS NULL THEN '""' ELSE age END)
    FROM Person
    INTO OUTFILE S3 's3uri'
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\n';
    
[/code]


CC BY-SA 4.0
2020-05-22T12:24:37.073
66889
2020-05-22T12:24:37.073
35558
66876
answer