Share via


Reglas de conversión de tipos de datos para dwloader: Analytics Platform Service (PDW)

En este artículo se describen los formatos de datos de entrada y las conversiones implícitas de tipos de datos que el cargador de la línea de comandos dwloader admite cuando carga datos en PDW. Las conversiones de datos implícitas se producen cuando los datos de entrada no coinciden con el tipo de datos de la tabla de destino PDW de SQL Server. Use esta información al diseñar el proceso de carga para asegurarse de que los datos se cargarán correctamente en PDW de SQL Server.

Inserción de literales en tipos binarios

En la tabla siguiente se definen los tipos literales aceptados, el formato y las reglas de conversión para cargar un valor literal en una columna de PDW de SQL Server de tipo binary (n) o varbinary(n).

Tipo de datos de entrada Ejemplos de datos de entrada Conversión al tipo de datos binary o varbinary
Literal binario [0x]cadena_hexadecimal

Ejemplo: 12Ef o 0x12Ef
El prefijo 0x es opcional.

La longitud del origen de datos no puede superar el número de bytes especificados para el tipo de datos.

Si la longitud del origen de datos es menor que el tamaño del tipo de datos binary, los datos se rellenan a la derecha con ceros para alcanzar el tamaño del tipo de datos.

Inserción de literales en tipos de fecha y hora

Los literales de fecha y hora se representan mediante literales de cadena en formatos específicos, entre comillas simples. En las tablas siguientes se definen los tipos literales permitidos, el formato y las reglas de conversión para cargar un literal de fecha u hora en una columna de tipo datetime, smalldatetime, date, time, datetimeoffset o datetime2. En las tablas se define el formato predeterminado para el tipo de datos especificado. Los demás formatos que se pueden especificar se definen en la sección Formatos de fecha y hora. Los literales de fecha y hora no pueden incluir espacios iniciales ni finales. Los valores date, smalldatetime y NULL no se pueden cargar en modo de ancho fijo.

Tipo de datos datetime

En la tabla siguiente se definen el formato predeterminado y las reglas para cargar valores literales en una columna de tipo datetime. Una cadena vacía ('') se convierte en el valor predeterminado "1900-01-01 12:00:00.000". Las cadenas que contienen solo espacios en blanco (" ") generan un error.

Tipo de datos de entrada Ejemplos de datos de entrada Conversión al tipo de datos datetime
Literal de cadena en formato datetime "aaaa-MM-dd hh:mm:ss[.fff]"

Ejemplo: "2007-05-08 12:35:29.123"
Los dígitos fraccionales que faltan se establecen en 0 cuando se inserta el valor. Por ejemplo, el literal "2007-05-08 12:35" se inserta como "2007-05-08 12:35:00.000".
Literal de cadena en formato smalldatetime "aaaa-MM-dd hh:mm"

Ejemplo: "2007-05-08 12:35"
Los segundos y los dígitos fraccionales restantes se establecen en 0 cuando se inserta el valor.
Literal de cadena en formato date "aaaa-MM-dd"

Ejemplo: "2007-05-08"
Los valores de hora (hora, minutos, segundos y fracciones) se establecen en 12:00:00.000 cuando se inserta el valor.
Literal de cadena en formato datetime2 "aaaa-MM-dd hh:mm:ss.fffffff"

Ejemplo: "2007-05-08 12:35:29.1234567"
Los datos de origen no pueden superar los tres dígitos fraccionales. Por ejemplo, se insertará el literal "2007-05-08 12:35:29.123", pero el valor "2007-05-8 12:35:29.1234567" genera un error.

Tipo de datos smalldatetime

En la tabla siguiente se definen el formato predeterminado y las reglas para cargar valores literales en una columna de tipo smalldatetime. Una cadena vacía ('') se convierte en el valor predeterminado "1900-01-01 12:00". Las cadenas que contienen solo espacios en blanco (" ") generan un error.

Tipo de datos de entrada Ejemplos de datos de entrada Conversión al tipo de datos smalldatetime
Literal de cadena en formato smalldatetime "aaaa-MM-dd hh:mm" o "aaaa-MM-dd hh:mm:ss"

Ejemplo: "2007-05-08 12:00" o "2007-05-08 12:00:15"
Los datos de origen deben tener valores para el año, el mes, la fecha, la hora y el minuto. Los segundos son opcionales y, si están presentes, se deben establecer en el valor 00. Cualquier otro valor genera un código de error.

Los segundos son opcionales. Al realizar la carga en una columna smalldatetime, dwloader redondea los segundos y las fracciones de segundo. Por ejemplo, 1999-01-05 20:10:35.123 se cargará como 01-05 20:11.
Literal de cadena en formato date "aaaa-MM-dd"

Ejemplo: "2007-05-08"
Los valores de hora (hora, minutos, segundos y fracciones) se establecen en 0 cuando se inserta el valor.

Tipo de datos date

En la tabla siguiente se definen el formato predeterminado y las reglas para cargar valores literales en una columna de tipo date. Una cadena vacía ('') se convierte en el valor predeterminado "1900-01-01". Las cadenas que contienen solo espacios en blanco (" ") generan un error.

Tipo de datos de entrada Ejemplos de datos de entrada Conversión al tipo de datos date
Literal de cadena en formato date "aaaa-MM-dd"

Ejemplo: "2007-05-08"

Tipo de datos time

En la tabla siguiente se definen el formato predeterminado y las reglas para cargar valores literales en una columna de tipo time. Una cadena vacía ('') se convierte en el valor predeterminado "00:00:00.0000". Las cadenas que contienen solo espacios en blanco (" ") generan un error.

Tipo de datos de entrada Ejemplos de datos de entrada Conversión al tipo de datos de Fecha y hora
Literal de cadena en formato time "hh:mm:ss.fffffff"

Ejemplo: "12:35:29.1234567"
Si el origen de datos tiene una precisión menor o igual (número de dígitos fraccionales) que la precisión del tipo de datos time, los datos se rellenan a la derecha con ceros. Por ejemplo, un valor literal "12:35:29.123" se inserta como "12:35:29.1230000".

Tipo de datos datetimeoffset

En la tabla siguiente se definen el formato predeterminado y las reglas para cargar valores literales en una columna de tipo datetimeoffset (n). El formato predeterminado es "aaaa-MM-dd hh:mm:ss.fffffff {+|-}hh:mm". Una cadena vacía ('') se convierte en el valor predeterminado "1900-01-01 12:00:00.0000000 +00:00". Las cadenas que contienen solo espacios en blanco (" ") generan un error. El número de dígitos fraccionales depende de la definición de columna. Por ejemplo, una columna definida como datetimeoffset (2) tendrá dos dígitos fraccionales.

Tipo de datos de entrada Ejemplos de datos de entrada Conversión al tipo de datos datetimeoffset
Literal de cadena en formato datetime "aaaa-MM-dd hh:mm:ss[.fff]"

Ejemplo: "2007-05-08 12:35:29.123"
Los dígitos fraccionales que faltan y los valores de desplazamiento se establecen en 0 cuando se inserta el valor. Por ejemplo, el literal "2007-05-08 12:35:29.123" se inserta como "2007-05-08 12:35:29.1230000 +00:00".
Literal de cadena en formato smalldatetime "aaaa-MM-dd hh:mm"

Ejemplo: "2007-05-08 12:35"
Los segundos, los dígitos fraccionales restantes y los valores de desplazamiento se establecen en 0 cuando se inserta el valor.
Literal de cadena en formato date "aaaa-MM-dd"

Ejemplo: "2007-05-08"
Los valores de hora (hora, minutos, segundos y fracciones) se establecen en 0 cuando se inserta el valor. Por ejemplo, el literal "2007-05-08" se inserta como "2007-05-08 00:00:00.0000000 +00:00".
Literal de cadena en formato datetime2 "aaaa-MM-dd hh:mm:ss.fffffff"

Ejemplo: "2007-05-08 12:35:29.1234567"
Los datos de origen no pueden superar el número especificado de fracciones de segundo en la columna datetimeoffset. Si el origen de datos tiene un número menor o igual de fracciones de segundo, los datos se rellenan a la derecha con ceros. Por ejemplo, si el tipo de datos es datetimeoffset (5), el valor literal "2007-05-08 12:35:29.123 +12:15" se inserta como "12:35:29.12300 +12:15".
Literal de cadena en formato datetimeoffset "aaaa-MM-dd hh:mm:ss.fffffff {+|-} hh:mm"

Ejemplo: "2007-05-08 12:35:29.1234567 +12:15"
Los datos de origen no pueden superar el número especificado de fracciones de segundo en la columna datetimeoffset. Si el origen de datos tiene un número menor o igual de fracciones de segundo, los datos se rellenan a la derecha con ceros. Por ejemplo, si el tipo de datos es datetimeoffset (5), el valor literal "2007-05-08 12:35:29.123 +12:15" se inserta como "12:35:29.12300 +12:15".

Tipo de datos datetime2

En la tabla siguiente se definen el formato predeterminado y las reglas para cargar valores literales en una columna de tipo datetime2 (n). El formato predeterminado es "aaaa-MM-dd hh:mm:ss.fffffff". Una cadena vacía ('') se convierte en el valor predeterminado "1900-01-01 12:00:00". Las cadenas que contienen solo espacios en blanco (" ") generan un error. El número de dígitos fraccionales depende de la definición de columna. Por ejemplo, una columna definida como datetime2 (2) tendrá dos dígitos fraccionales.

Tipo de datos de entrada Ejemplos de datos de entrada Conversión al tipo de datos datetime2
Literal de cadena en formato datetime "aaaa-MM-dd hh:mm:ss[.fff]"

Ejemplo: "2007-05-08 12:35:29.123"
Las fracciones de segundo son opcionales y se establecen en 0 cuando se inserta el valor.
Literal de cadena en formato smalldatetime "aaaa-MM-dd hh:mm"

Ejemplo: "2007-05-08 12"
Los segundos opcionales y los dígitos fraccionales restantes se establecen en 0 cuando se inserta el valor.
Literal de cadena en formato date "aaaa-MM-dd"

Ejemplo: "2007-05-08"
Los valores de hora (hora, minutos, segundos y fracciones) se establecen en 0 cuando se inserta el valor. Por ejemplo, el literal "2007-05-08" se inserta como "2007-05-08 12:00:00.0000000".
Literal de cadena en formato datetime2 "aaaa-MM-dd hh:mm:ss:fffffff"

Ejemplo: "2007-05-08 12:35:29.1234567"
Si el origen de datos contiene componentes de datos y hora que son menores o iguales que el valor especificado en datetime2(n), se insertan los datos; de lo contrario, se genera un error.

Formatos de datetime

dwloader admite los siguientes formatos de datos para los datos de entrada que se cargan en PDW de SQL Server. Se muestran más detalles después de la tabla.

datetime smalldatetime date datetime2 datetimeoffset
[M[M]]M-[d]d-[aa]aa HH:mm:ss[.fff] [M[M]]M-[d]d-[aa]aa HH:mm[:00] [M[M]]M-[d]d-[aa]aa [M[M]]M-[d]d-[aa]aa HH:mm:ss[.fffffff] [M[M]]M-[d]d-[aa]aa HH:mm:ss[.fffffff] zzz
[M[M]]M-[d]d-[aa]aa hh:mm:ss[.fff][tt] [M[M]]M-[d]d-[aa]aa hh:mm[:00][tt] [M[M]]M-[d]d-[aa]aa hh:mm:ss[.fffffff][tt] [M[M]]M-[d]d-[aa]aa hh:mm:ss[.fffffff][tt] zzz
[M[M]]M-[aa]aa-[d]d HH:mm:ss[.fff] [M[M]]M-[aa]aa-[d]d HH:mm[:00] [M[M]]M-[aa]aa-[d]d [M[M]]M-[aa]aa-[d]d HH:mm:ss[.fffffff] [M[M]]M-[aa]aa-[d]d HH:mm:ss[.fffffff] zzz
[M[M]]M-[aa]aa-[d]d hh:mm:ss[.fff][tt] [M[M]]M-[aa]aa-[d]d hh:mm[:00][tt] [M[M]]M-[aa]aa-[d]d hh:mm:ss[.fffffff][tt] [M[M]]M-[aa]aa-[d]d hh:mm:ss[.fffffff][tt] zzz
[aa]aa-[M[M]]M-[d]d HH:mm:ss[.fff] [aa]aa-[M[M]]M-[d]d HH:mm[:00] [aa]aa-[M[M]]M-[d]d [aa]aa-[M[M]]M-[d]d HH:mm:ss[.fffffff] [aa]aa-[M[M]]M-[d]d HH:mm:ss[.fffffff] zzz
[aa]aa-[M[M]]M-[d]d hh:mm:ss[.fff][tt] [aa]aa-[M[M]]M-[d]d hh:mm[:00][tt] [aa]aa-[M[M]]M-[d]d hh:mm:ss[.fffffff][tt] [aa]aa-[M[M]]M-[d]d hh:mm:ss[.fffffff][tt] zzz
[aa]aa-[d]d-[M[M]]M HH:mm:ss[.fff] [aa]aa-[d]d-[M[M]]M HH:mm[:00] [aa]aa-[d]d-[M[M]]M [aa]aa-[d]d-[M[M]]M HH:mm:ss[.fffffff] [aa]aa-[d]d-[M[M]]M HH:mm:ss[.fffffff] zzz
[aa]aa-[d]d-[M[M]]M hh:mm:ss[.fff][tt] [aa]aa-[d]d-[M[M]]M hh:mm[:00][tt] [aa]aa-[d]d-[M[M]]M hh:mm:ss[.fffffff][tt] [aa]aa-[d]d-[M[M]]M hh:mm:ss[.fffffff][tt] zzz
[d]d-[M[M]]M-[aa]aa HH:mm:ss[.fff] [d]d-[M[M]]M-[aa]aa HH:mm[:00] [d]d-[M[M]]M-[aa]aa [d]d-[M[M]]M-[aa]aa HH:mm:ss[.fffffff] [d]d-[M[M]]M-[aa]aa HH:mm:ss[.fffffff] zzz
[d]d-[M[M]]M-[aa]aa hh:mm:ss[.fff][tt] [d]d-[M[M]]M-[aa]aa hh:mm[:00][tt] [d]d-[M[M]]M-[aa]aa hh:mm:ss[.fffffff][tt] [d]d-[M[M]]M-[aa]aa hh:mm:ss[.fffffff][tt] zzz
[d]d-[aa]aa-[M[M]]M HH:mm:ss[.fff] [d]d-[aa]aa-[M[M]]M HH:mm[:00] [d]d-[aa]aa-[M[M]]M [d]d-[aa]aa-[M[M]]M HH:mm:ss[.fffffff] [d]d-[aa]aa-[M[M]]M HH:mm:ss[.fffffff] zzz
[d]d-[aa]aa-[M[M]]M hh:mm:ss[.fff][tt] [d]d-[aa]aa-[M[M]]M hh:mm[:00][tt] [d]d-[aa]aa-[M[M]]M hh:mm:ss[.fffffff][tt] [d]d-[aa]aa-[M[M]]M hh:mm:ss[.fffffff][tt] zzz

Detalles:

  • Para separar los valores de mes, día y año, puede usar " - ", " / " o ". '. Para simplificar, en la tabla solo se usa el separador " - ".

  • Para especificar el mes como texto, use tres o más caracteres. Los meses con uno o dos caracteres se interpretan como un número.

  • Para separar valores de hora, use el símbolo " : ".

  • Las letras entre corchetes son opcionales.

  • Las letras "tt" designan AM|PM|am|pm. AM es el valor predeterminado. Cuando se especifica "tt", el valor de hora (hh) debe estar comprendido entre 0 y 12.

  • Las letras "zzz" designan la diferencia de zona horaria de la zona horaria actual del sistema en el formato {+|-}HH:ss].

Inserción de literales en tipos numéricos

En las tablas siguientes se definen las reglas de formato y conversión predeterminadas para cargar un valor literal en una columna PDW de SQL Server que usa un tipo numérico.

Tipo de datos bit

En la tabla siguiente se definen el formato predeterminado y las reglas para cargar valores literales en una columna de tipo bit. Una cadena vacía ('') o una cadena que solo contiene espacios en blanco (" ") se convierte en 0.

Tipo de datos de entrada Ejemplos de datos de entrada Conversión al tipo de datos bit
Literal de cadena en formato entero "ffffffffff"

Ejemplo: "1" o "321"
Un valor entero con formato de literal de cadena no puede contener un valor negativo. Por ejemplo, el valor "-123" genera un error.

Un valor mayor que 1 se convierte en 1. Por ejemplo, el valor "123" se convierte en 1.
Literal de cadena "TRUE" o "FALSE"

Ejemplo: "true"
El valor "TRUE" se convierte en 1; el valor "FALSE" se convierte en 0.
Literal entero fffffffn

Ejemplo: 1 o 321
Un valor mayor que 1 o menor que 0 se convierte en 1. Por ejemplo, los valores 123 y -123 se convierten en 1.
Literal decimal fffnn.fffn

Ejemplo: 1234,5678
Un valor mayor que 1 o menor que 0 se convierte en 1. Por ejemplo, los valores 123,45 y -123,45 se convierten en 1.

Tipo de datos decimal

En la tabla siguiente se definen las reglas para cargar valores literales en una columna de tipo decimal (p,s). Las reglas de conversión de datos son las mismas que para SQL Server. Para más información, vea Conversión de tipos de datos (motor de base de datos) en MSDN.

Tipo de datos de entrada Ejemplos de datos de entrada
Literal entero 321312313123
Literal decimal 123344,34455

Tipos de datos float y real

En la tabla siguiente se definen las reglas para cargar valores literales en una columna de tipo float o real. Las reglas de conversión de datos son las mismas que para SQL Server. Para más información, vea Conversión de tipos de datos (motor de base de datos) en MSDN.

Tipo de datos de entrada Ejemplos de datos de entrada
Literal entero 321312313123
Literal decimal 123344,34455
Literal de punto flotante 3,12323E+14

Tipos de datos int, bigint, tinyint, smallint

En la tabla siguiente se definen las reglas para cargar valores literales en una columna de tipo int, bigint, tinyint o smallint. El origen de datos no puede superar el intervalo permitido para el tipo de datos especificado. Por ejemplo, el intervalo de tinyint es de 0 a 255, y el intervalo de int es de -2.147.483.648 a 2.147.483.647.

Tipo de datos de entrada Ejemplos de datos de entrada Conversión a tipos de datos enteros
Literal entero 321312313123
Literal decimal 123344,34455 Los valores situados a la derecha del separador decimal se truncan.

Tipos de datos money y smallmoney

Los valores literales de moneda se representan como una cadena de números con un separador decimal y un símbolo de moneda opcional como prefijo. El origen de datos no puede superar el intervalo permitido para el tipo de datos especificado. Por ejemplo, el intervalo de smallmoney es de -214.748.3648 a 214.748.3647 y el de money es de -922.337.203.685.477,5808 a 922.337.203.685.477,5807. En la tabla siguiente se definen las reglas para cargar valores literales en una columna de tipo money o smallmoney.

Tipo de datos de entrada Ejemplos de datos de entrada Conversión al tipo de datos money o smallmoney
Literal entero 321312 Los dígitos que faltan después del separador decimal se establecen en 0 cuando se inserta el valor. Por ejemplo, el literal 12345 se inserta como 12345,0000
Literal decimal 123344,34455 Si el número de dígitos después del separador decimal supera los 4, el valor se redondea al valor más cercano. Por ejemplo, el valor 123344,34455 se inserta como 123344,3446.
Literal de moneda $123456,7890 El símbolo de moneda no se inserta con el valor.

Si el número de dígitos después del separador decimal supera los 4, el valor se redondea al valor más cercano.

Inserción de literales en tipos de cadena

En la tabla siguiente se definen el formato predeterminado y las reglas de conversión para cargar un valor literal en una columna de PDW de SQL Server en la que se usa un tipo de cadena.

Tipos de datos char, varchar, nchar y nvarchar

En la tabla siguiente se definen el formato predeterminado y las reglas para cargar valores literales en una columna de tipo char, varchar, nchar y nvarchar. La longitud del origen de datos no puede superar el tamaño especificado para el tipo de datos. Si la longitud del origen de datos es menor que el tamaño del tipo de datos char o nchar, los datos se rellenan a la derecha con espacios en blanco para alcanzar el tamaño del tipo de datos.

Tipo de datos de entrada Ejemplos de datos de entrada Conversión a tipos de datos de caracteres
Literal de cadena Formato: "cadena de caracteres"

Ejemplo: "abc"
N/D
Literal de cadena Unicode Formato: N"cadena de caracteres"

Ejemplo: N"abc"
N/D
Literal entero Formato: ffffffffffn

Ejemplo: 321312313123
N/D
Literal decimal Formato: ffffff,fffffff

Ejemplo: 12344,34455
N/D
Literal de moneda Formato: $ffffff,fffnn

Ejemplo: $123456,99
El símbolo de moneda opcional no se inserta con el valor. Para insertar el símbolo de moneda, inserte el valor como un literal de cadena. Esto coincidirá con el formato del cargador, que procesa cada literal como un literal de cadena.

No se permiten comas.

Si el número de dígitos después del separador decimal es superior a 2, el valor se redondea al valor más cercano. Por ejemplo, el valor 123,946789 se inserta como 123,95.

Solo se permite el estilo predeterminado 0 (sin comas y dos dígitos después del separador decimal) al usar la función CONVERT para insertar literales de divisa.

Notas generales

dwloader realiza las mismas conversiones implícitas que SMP de SQL Server, pero no admite todas las conversiones implícitas que admite SMP de SQL Server.