Миграция с aws dms s3 на sql server - укажите datetime2 в качестве типа данных sql server.

Я пытаюсь использовать AWS Database Migration Service (DMS) для заполнения таблицы SQL Server 2014 из S3. У меня следующая схема S3:

{
  "TableCount": "1",
  "Tables": [
    {
      "TableName": "employee",
      "TablePath": "public/employee/",
      "TableOwner": "",
      "TableColumns": [
        {
          "ColumnName": "Id",
          "ColumnType": "INT8",
          "ColumnNullable": "false",
          "ColumnIsPk": "true"
        },
        {
          "ColumnName": "HireDate",
          "ColumnType": "TIMESTAMP"
        },
        {
          "ColumnName": "Name",
          "ColumnType": "STRING",
          "ColumnLength": "20"
        }
      ],
      "TableColumnsTotal": "3"
    }
  ]
}

Когда я запускаю задачу миграции, я получаю указанную ниже ошибку переполнения, потому что SQL Server не позволяет вставить значение 2018-04-11 08:02:16.788027 из S3 в столбец SQL Server DATETIME.

У меня вопрос: можно ли указать AWS DMS создать данные TIMESTAMP S3 в виде столбцов DATETIME2 в SQL Server? Примечание: При каждом запуске миграции таблица удаляется и создается заново. Я могу обойти это, вручную создав таблицу самостоятельно в SQL-Server с HireDate как DATETIME2, а затем установив режим подготовки целевой таблицы миграции DMS на TRUNCATE, а не на удаление / создание, но это не идеально для моего текущего решения.

[TARGET_LOAD ]E: Failed to execute statement: 'INSERT INTO [public].[employee]([Id],[HireDate],[Name]) values (?,?,?)' [1022502] (ar_odbc_stmt.c:2456)
[TARGET_LOAD ]E: RetCode: SQL_ERROR SqlState: 22008 NativeError: 0 Message: [Microsoft][ODBC Driver 13 for SQL Server]Datetime field overflow. Fractional second precision exceeds the scale specified in the parameter binding. Line: 1 Column: 4 [1022502] (ar_odbc_stmt.c:2462)
[TARGET_LOAD ]E: Invalid input for column 'HireDate' of table 'public'.'employee' in line number 1.(sqlserver_endpoint_imp.c:2357)
1
0
278
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решение состоит в том, чтобы указать атрибут "ColumnScale" в вашей схеме S3 для столбцов timestamp, это обеспечит создание целевого столбца SQL Server как DATETIME2(7), т.е.

{
  "TableCount": "1",
  "Tables": [
    {
      "TableName": "employee",
      "TablePath": "public/employee/",
      "TableOwner": "",
      "TableColumns": [
        {
          "ColumnName": "Id",
          "ColumnType": "INT8",
          "ColumnNullable": "false",
          "ColumnIsPk": "true"
        },
        {
          "ColumnName": "HireDate",
          "ColumnType": "TIMESTAMP",
          "ColumnScale": "7",
        },
        {
          "ColumnName": "Name",
          "ColumnType": "STRING",
          "ColumnLength": "20"
        }
      ],
      "TableColumnsTotal": "3"
    }
  ]
}

Другие вопросы по теме