AWS конвейер данных Mysql Формат данных от RDS до S3 не работает для columnSeparator - PullRequest
1 голос
/ 05 апреля 2020

Я установил линию данных из простого оператора select. По умолчанию columnSeparator является запятой. Строка datapipe работает нормально, но мне нужно изменить columnSeparator на трубу. Поэтому я добавил новый раздел в свое определение.

Новый раздел начинается с "id" : "CustomDataFormatExample"...

Это ничего не делает. Это не ошибка. Он просто продолжает выводить столбец с разделителем-запятой.

{
  "objects": [
    {
      "*password": "#{*myRDSPassword}",
      "name": "rds_mysql",
      "jdbcProperties": "allowMultiQueries=true",
      "id": "rds_mysql",
      "type": "RdsDatabase",
      "rdsInstanceId": "#{myRDSInstanceId}",
      "username": "#{myRDSUsername}"
    },
    {
      "output": {
        "ref": "S3OutputLocation"
      },
      "input": {
        "ref": "SourceRDSTable"
      },
      "name": "RDStoS3CopyActivity",
      "runsOn": {
        "ref": "Ec2Instance"
      },
      "id": "RDStoS3CopyActivity",
      "type": "CopyActivity"
    },
    {
      "database": {
        "ref": "rds_mysql"
      },
      "name": "SourceRDSTable",
      "id": "SourceRDSTable",
      "type": "SqlDataNode",
      "table": "#{myRDSTableName}",
      "selectQuery": "#{myRDSSqlStatement}"
    },
    {
      "failureAndRerunMode": "CASCADE",
      "schedule": {
        "ref": "DefaultSchedule"
      },
      "resourceRole": "DataPipelineDefaultResourceRole",
      "role": "DataPipelineDefaultRole",
      "scheduleType": "cron",
      "name": "Default",
      "id": "Default"
    },
    {
      "instanceType": "#{myEC2InstanceType}",
      "name": "Ec2Instance",
      "actionOnTaskFailure": "terminate",
      "securityGroups": "#{myEc2RdsSecurityGrps}",
      "id": "Ec2Instance",
      "type": "Ec2Resource",
      "terminateAfter": "2 Hours"
    },
    {
      "period": "1 days",
      "startDateTime": "2020-04-05T23:10:00",
      "name": "Every 1 day",
      "id": "DefaultSchedule",
      "type": "Schedule"
    },
    {
      "filePath": "#{myOutputS3Loc}/#{myOutputS3FileName}",
      "name": "S3OutputLocation",
      "id": "S3OutputLocation",
      "type": "S3DataNode"
    },
    {
      "id" : "CustomDataFormatExample",
      "name" : "CustomDataFormatExample",
      "type" : "TSV",
      "columnSeparator" : "|",
      "column":[
        "aci_code STRING",
        "address_id STRING",
        "created STRING",
        "created_by STRING",
        "additional_address_line STRING",
        "correspondence STRING",
        "line_1 STRING",
        "line_2 STRING",
        "line_3 STRING",
        "line_4 STRING",
        "line_5 STRING",
        "postcode STRING",
        "postcode_nospace STRING",
        "country_code STRING"
        ],
      "escapeChar": "\\",
      "recordSeparator": "\\n"
    }
  ],
  "parameters": [
        // Some parameters in here.
  ],
  "values": {
        // Some values in here.
  }
}

1 Ответ

0 голосов
/ 05 апреля 2020

Вы должны явно установить поле dataFormat в S3DataNode,

    ...
    {
      "filePath": "#{myOutputS3Loc}/#{myOutputS3FileName}",
      "name": "S3OutputLocation",
      "id": "S3OutputLocation",
      "type": "S3DataNode",
      "dataFormat": { "ref": "CustomDataFormatExample" }
    },
    ...
...