Professional Documents
Culture Documents
BULK Datos Masivos SQL Server 2012
BULK Datos Masivos SQL Server 2012
BULK Datos Masivos SQL Server 2012
ie.
APPLICANTID,NAME,CONTACT,PHONENO,MOBILENO,FAXNO,EMAIL,ADDR1,ADDR2,AD
DR3,STATE,POSTCODE
"3","Snoop Dogg","Snoop Dogg","411","","","","411 High Street","USA
","","USA", "1111" "4","LL Cool J","LL Cool J","","","","","5 King
Street","","","USA","1111"
I am using an xml format file to try and overcome the "" delimiters as I believe I
would have to update the data again after importing to remove the inital " if it did
not.
Msg 4864, Level 16, State 1, Line 1 Bulk load data conversion error (type mismatch
or invalid character for the specified codepage) for row 2, column 1
(APPLICANTID).
I have tried various different combinations for the terminator including using:
TERMINATOR="","
TERMINATOR="\","
TERMINATOR='","
TERMINATOR='\","
Is there a correct way to escape the " so that it will be parsed correctly, assuming that
that is my problem here.
3 Answers
active oldest votes
up vote Ok so I figured it out!
10 down
vote You can use ' instead of " when you are defining the xml attributes ie
accepted TERMINATOR='', then you can use the " within them without worrying.
Also I needed to eat the first " with a field so the other columns could be parsed
correctly. This ended up with the format file
<?xml version="1.0"?>
<BCPFORMAT
xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format
" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR='"' />
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR='","' />
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR='","' />
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR='","' />
<FIELD ID="5" xsi:type="CharTerm" TERMINATOR='","' />
<FIELD ID="6" xsi:type="CharTerm" TERMINATOR='","' />
<FIELD ID="7" xsi:type="CharTerm" TERMINATOR='","' />
<FIELD ID="8" xsi:type="CharTerm" TERMINATOR='","' />
<FIELD ID="9" xsi:type="CharTerm" TERMINATOR='","' />
<FIELD ID="10" xsi:type="CharTerm" TERMINATOR='","' />
<FIELD ID="11" xsi:type="CharTerm" TERMINATOR='","' />
<FIELD ID="12" xsi:type="CharTerm" TERMINATOR='","' />
<FIELD ID="13" xsi:type="CharTerm" TERMINATOR='"\r\n' />
</RECORD>
<ROW>
<COLUMN SOURCE="2" NAME="APPLICANTID" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="3" NAME="NAME" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="CONTACT" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="5" NAME="PHONENO" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="6" NAME="MOBILENO" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="7" NAME="FAXNO" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="8" NAME="EMAIL" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="9" NAME="ADDR1" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="10" NAME="ADDR2" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="11" NAME="ADDR3" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="12" NAME="STATE" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="13" NAME="POSTCODE" xsi:type="SQLCHAR"/>
</ROW>
</BCPFORMAT>
Where the first field is just a throw away one to remove the first " and the other fields all
separate on "," and the final separates on "(newline)
Daniel Powell
4,21722766
Thanks! This is the best solution I have found to a very common problem.
I've created a similar xml file for my import and it works perfectly. – Derek
Tomes Mar 18 '12 at 22:30
add a comment
Tip: if only some of the fields are doubleqouted, then use the openrowset
version of the bulk insert, and doing so, you can manipulate the field content
coming from the input file before inserting into the target table.
In the manipulation you can do anything with the field content, e.g. removing
double-quotes. The effect on the performance is not mentioned here, I have no
measures regarding this.
up vote 2
down vote edited Oct 27 '12 at answered Jan 27 '12 at
14:32 13:34
shareimprove this
answer
SchmitzIT Estevez
4,61292346 12114
add a comment
Tip: if your CSV file don't have consistent format, for example ON THE SAME
COLUMN some of the values are doubleqouted and some not than this blog will
help you do it in an easy way (this is a continue to Estevez's tip as using the
up vote openrowset is just the last step) http://ariely.info/Blog/tabid/83/EntryId/122/Using-
1 down Bulk-Insert-to-import-inconsistent-data-format-using-pure-T-SQL.aspx
vote there is a WIKI at http://social.technet.microsoft.com/wiki based on this blog
if you prefer to read from Microsoft site.
Hola muchachos y empezando con mis pequeñas ayudas técnicas les preparé un pequeño
material para que puedas cargar un archivo de texto en formato *.txt o *.csv a una tabla en
SQL Server 2008, bueno comencemos :D
Vamos a crear una base de datos simple y una tabla nueva para realizar nuestro ejemplo,
entonces hacemos esto:
Ahora para crear una tabla ejecutamos (Sombreando + Botón execute) el siguiente código:
USE DB_APRENDIZAJE
--Para utilizar la Base de datos
Como puedes ver ya esta lista nuestra tabla y aunque vacía ya sabemos que tipos de datos
se van a poder insertar, esto es importante porque al cargar los datos de origen desde
nuestro archivo de texto o csv estos tienen que coincidir con los de destino, ahora creamos
nuestro archivo de texto con los datos que vamos a ingresar.
Ya tenemos nuestro archivo y para este ejemplo lo he guardado en mi partición D:\ en una
carpeta BASES DE DATOS asi que podré acceder a este fácilmente, para cargar el archivo
a nuestra tabla ejecutamos el siguiente código en nuestra hojita de consultas:
BULK
INSERT TIENDA
FROM 'D:\BASES DE DATOS\DATOS.txt'--Ruta archivo
WITH
GO
Ejecutamos la consulta y vemos que los cambios se han realizado, podemos comprobar si
los datos están cargados mediante un nuevo SELECT
Relacionado
Creación de Tablas e Integridad referencial en Transact SQL ServerEn "Curso SQL Server
2008"
Acciones
Comments RSS
Trackback
Information
32 responses
29 05 2009
Para empezar con SQL Server 2008, muy ilustrativo el ejemplo y muy accesible el
tutorial.
Saludos
Responder
30 07 2009
Qué pasa cuando quiero insertar valores con Ñs, o acentos… cómo puedo definir el
lenguage a utilizar por el bulk
Responder
5 08 2009
huamanpunlay (21:08:53) :
Esto en si es la forma de subir archivos planos para cargar la tabla, las definiciones
de Ñs y acentos dependen del tipo de datos para eso revisa informacion sobre texto
Unicode y no Unicode
Responder
4 08 2009
guss_69 (01:57:25) :
Responder
2 09 2009
juan (16:33:40) :
que pasa cuando el archivo plano es de longitud fija? es decir no tiene caracter
especial que delimite las columnas,,… hay alguna manera de hacerlo?
Responder
3 09 2009
huamanpunlay (18:55:32) :
Bueno si te refieres a que no tiene un caracter especial como por ejemplo una coma,
quizas puede ser solo un espacio vacío y en el fieldterminator simplemente iria un
espacio en blanco (” “) así donde se vea el espacio se reconocerá como separador,
realiza tus pruebas y si deseas mas documentacion aquí en technet o msdn
encuentras la sintaxis completa …saludos :D
http://technet.microsoft.com/es-es/library/ms188365.aspx
Responder
15 10 2009
Hola huamanpunlay,
Tengo la misma duda que Juan, ¿como le haces cuando no hay ningún delimitador,
ni siquiera espacio, sino que son longitudes constantes, pero incluso en un mismo
archivo de texto plano hay distintas separaciones, por ejemplo, los renglones 1 a 5
se separarán de cierta forma y los renglones 6 a 10 de otra forma?.
Saludos
Responder
17 10 2009
huamanpunlay (07:37:14) :
Hola cuando no hay delimitador puedes incluir ahi también un espacio en blanco o
como sea que este separado el campo y bueno en lo demás ya eso viene por cuenta
de la limpieza de tu data y los formatos que puedes obtenerlas, tambien podrías
hacer uso del asistente del SQL Server o sino generar un proyecto de Integration y
hacerlo a nivel de ETL pero esto ya es otro tema, como se dice tenemos que
ingeniarnosla porque un método así específico no te podría dar la verdad…
saludos :D
Responder
21 10 2009
Fijate que estaba pensando en usar el SSIS, pero esta herramienta solo viene en las
versiones SQLServer de paga, la versión Express no la tiene. Y creo que el cliente
al que le estamos haciendo el desarrollo no tiene SQL de paga, sabes si el proyecto
creado en SSIS correría en un servidor con SQL 2008 Express o en su defecto en
SQL de paga pero versión 2000?
Responder
22 10 2009
huamanpunlay (19:49:00) :
Responder
27 10 2009
Saludos
30 10 2009
Maik (18:24:41) :
Responder
30 10 2009
Maik (18:27:22) :
Responder
31 10 2009
huamanpunlay (05:04:34) :
With
(
FieldTerminator = ‘,’,
rowterminator =’\n’,
DataFileType =’widechar’ )
Saludos :D
Responder
5 12 2009
NOHANY (02:57:11) :
graciazz!!!!
Responder
15 12 2009
Christian (14:56:16) :
Responder
27 01 2010
Hola huamanpunlay,
Tengo que cargar una archivo de Excel 2003 (.xls) a la BD, sabes como hacelo
utilizando BULK INSERT?. El problema es que no me permiten que se convierta
primero a CSV porque si ese fuera el caso, aplico exactamente tu Tutorial.
Responder
30 01 2010
Veronica (09:10:01) :
Responder
31 01 2010
huamanpunlay (02:19:06) :
Responder
26 04 2010
Damián (02:22:03) :
Hola!! muy buena ayuda.
Pero , que pasa si en el archivo tengo filas duplicadas..como hago para que bulk
insert me genere un archivo con estas iconsistencias, pero igual me inserte aquellas
filas que estan bien. Muchas Gracias!!
Responder
3 06 2010
Elias (22:20:43) :
Responder
9 06 2010
Irving (20:50:50) :
Responder
16 06 2010
huamanpunlay (08:17:52) :
Responder
22 10 2010
fer (14:50:13) :
Responder
10 12 2010
GrM@n (02:52:13) :
Gracias me sera muy util en mi hora de examen, terminare primero que los demas :)
Responder
25 10 2011
Responder
13 02 2012
Karolain (03:09:56) :
hola me encanto tu articulo, y me funciona para algunas tablas pero cuando tengo
que meter fechas … llega el problema . Con el insert sencillo la fecha la coloco
INSERT INTO US VALUES (‘david’ , ’28-12-2011′ ) y me inserta super. Pero
cuando ejecuto tus sentencias me sale un error en la fecha… existe alguna manera
de manejar esto?
Responder
14 02 2012
esteban (20:55:57) :
Responder
15 02 2012
Benito (19:26:24) :
Responder
28 08 2012
William (06:23:01) :
gracias por el tuto, cabalmente andaba buscando como cargar un archivo .csv,
gracias nuevamente
Responder
25 07 2013
DaNi Alexis (03:45:00) :
Responder
5 08 2013
Agustín (22:34:21) :
Responder
Importa un archivo de datos en una tabla o vista de base de datos con un formato especificado por
el usuario en SQL Server
Se aplica a: SQL Server (desde SQL Server 2008 hasta la versión actual).
Sintaxis
BULK INSERT
[ database_name . [ schema_name ] . | schema_name . ] [ table_name |
view_name ]
FROM 'data_file'
[ WITH
(
[ [ , ] BATCHSIZE = batch_size ]
[ [ , ] CHECK_CONSTRAINTS ]
[ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]
[ [ , ] DATAFILETYPE =
{ 'char' | 'native'| 'widechar' | 'widenative' } ]
[ [ , ] FIELDTERMINATOR = 'field_terminator' ]
[ [ , ] FIRSTROW = first_row ]
[ [ , ] FIRE_TRIGGERS ]
[ [ , ] FORMATFILE = 'format_file_path' ]
[ [ , ] KEEPIDENTITY ]
[ [ , ] KEEPNULLS ]
[ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ]
[ [ , ] LASTROW = last_row ]
[ [ , ] MAXERRORS = max_errors ]
[ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]
[ [ , ] ROWS_PER_BATCH = rows_per_batch ]
[ [ , ] ROWTERMINATOR = 'row_terminator' ]
[ [ , ] TABLOCK ]
[ [ , ] ERRORFILE = 'file_name' ]
)]
Argumentos
database_name
schema_name
table_name
Es la ruta de acceso completa al archivo de datos que contiene los datos que se van
a importar en la tabla o vista especificada. BULK INSERT puede importar datos
desde un disco (incluidos una ubicación de red, disquete, disco duro, etc.).
data_file debe especificar una ruta de acceso válida del servidor en el que se ejecuta
SQL Server. Si data_file es un archivo remoto, especifique un nombre UNC
(Convención de nomenclatura universal). Un nombre UNC tiene el formato \\
Systemname\ShareName\Path\FileName. Por ejemplo, \\SystemX\DiskZ\Sales\
update.txt.
BATCHSIZE =batch_size
Especifica el número de filas de un lote. Cada lote se copia en el servidor como una
transacción. Si no ocurre así, SQL Server confirma o revierte la transacción de cada
lote. De forma predeterminada, todos los datos del archivo de datos especificado
componen un lote. Para obtener información acerca de consideraciones de
rendimiento, vea la sección "Comentarios" más adelante en este tema.
CHECK_CONSTRAINTS
Especifica que deben comprobarse todas las restricciones de la tabla o vista de destino
durante la operación de importación masiva. Sin la opción CHECK_CONSTRAINTS, se
omiten las restricciones CHECK y FOREIGN KEY, y, después de la operación, la restricción
sobre la tabla se marca como de no confianza.
Nota
Las restricciones UNIQUE y PRIMARY KEY se aplican siempre. Cuando se
importa en una columna de caracteres definida con la restricción NOT NULL,
BULK INSERT inserta una cadena vacía cuando no hay valor en el archivo de texto.
Una situación en la que quizá desee que las restricciones estén deshabilitadas
(comportamiento predeterminado) se produce cuando los datos de entrada contienen
filas que infringen las restricciones. Con las restricciones CHECK deshabilitadas, puede
importar los datos y utilizar después instrucciones Transact-SQL para quitar los datos no
válidos.
Nota
La opción MAXERRORS no se aplica a la comprobación de restricciones.
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' }
Nota
Microsoft recomienda especificar un nombre de intercalación para cada columna de
un archivo de formato.
Valor de
Descripción
CODEPAGE
Las columnas con el tipo de datos char, varchar o text se
ACP convierten de la página de códigos ANSI/Microsoft Windows
(ISO 1252) a la página de códigos de SQL Server.
Las columnas con los tipos de datos char, varchar o text se
OEM (valor
convierten de la página de códigos OEM del sistema a la
predeterminado)
página de códigos de SQL Server.
No se realiza ninguna conversión de una página de códigos a
RAW
otra; se trata de la opción más rápida.
Número específico de una página de códigos; por ejemplo, 850.
code_page Importante
SQL Server no admite la página de códigos 65001
(codificación UTF-8).
DATAFILETYPE = { 'char' | 'native' | 'widechar' | 'widenative' }
Especifica que BULK INSERT realiza la operación de importación con el valor de tipo de
archivo de datos especificado.
Valor de
Todos los datos representados en:
DATAFILETYPE
Formato de caracteres.
char (valor
predeterminado) Para obtener más información, vea Usar el formato de
caracteres para importar o exportar datos (SQL Server).
Tipos de datos nativos (base de datos). Cree el archivo de
datos nativos mediante la importación masiva de datos desde
SQL Server con la utilidad bcp.
FIRSTROW =first_row
Nota
El atributo FIRSTROW no está pensado para saltar los encabezados de columna. La
instrucción BULK INSERT no permite omitir los encabezados. Al omitir filas,
Motor de base de datos de SQL Server solo analiza los terminadores de campo y no
valida los datos en los campos de las filas omitidas.
FIRE_TRIGGERS
FORMATFILE ='format_file_path'
KEEPIDENTITY
Para obtener más información acerca de cómo mantener los valores de identidad,
vea Mantener valores de identidad al importar datos de forma masiva (SQL Server).
KEEPNULLS
Especifica que las columnas vacías deben conservar un valor NULL durante la
operación de importación masiva, en lugar de tener valores predeterminados para
las columnas insertadas. Para obtener más información, vea Mantener valores
NULL o usar valores predeterminados durante la importación masiva (SQL Server).
KILOBYTES_PER_BATCH = kilobytes_per_batch
LASTROW=last_row
MAXERRORS = max_errors
Especifica la forma en que están ordenados los datos del archivo de datos. El
rendimiento de la importación masiva mejora si los datos importados se ordenan
según el índice clúster de la tabla, si lo hay. Si el archivo de datos se ordena
siguiendo otro criterio que no sea el orden de una clave de índice clúster, o si no hay
ningún índice clúster en la tabla, la cláusula ORDER se pasa por alto. Los nombres
de columna facilitados deben ser nombres válidos en la tabla de destino. De forma
predeterminada, la operación de inserción masiva presupone que los datos del
archivo no están ordenados. Para optimizar las operaciones de importación masiva,
SQL Server también se valida que los datos importados estén ordenados.
ROWS_PER_BATCH =rows_per_batch
De forma predeterminada, todos los datos del archivo de datos se envían al servidor
en una sola transacción y el optimizador de consultas desconoce el número de filas
del lote. Si especifica ROWS_PER_BATCH (con el valor > 0) el servidor utiliza
este valor para optimizar la operación de importación masiva. El valor especificado
para ROWS_PER_BATCH debe ser aproximadamente el mismo que el número real
de filas. Para obtener información acerca de consideraciones de rendimiento, vea la
sección "Comentarios" más adelante en este tema.
ROWTERMINATOR ='row_terminator'
TABLOCK
ERRORFILE ='file_name'
Especifica el archivo utilizado para recopilar filas que tienen errores de formato y
no pueden convertirse en un conjunto de filas OLE DB. Estas filas se copian en este
archivo de errores desde el archivo de datos "tal cual".
Compatibilidad
BULK INSERT aplica una estricta validación y comprobación de los datos leídos de un
archivo que pueden dar lugar a errores en los scripts existentes cuando se ejecutan en datos
no válidos. Por ejemplo, BULK INSERT comprueba que:
Las representaciones nativas de los tipos de datos float o real son válidas.
Los datos Unicode tienen una longitud de bytes uniforme.
Tipos de datos
Conversiones de tipos de datos de cadena a decimal
Nota
Los archivos de formato representan los datos real como el tipo de datos SQLFLT4 y los
datos float como el tipo de datos SQLFLT8. Para obtener información acerca de los
archivos de formato no XML, vea Especificar el tipo de almacenamiento en archivo
mediante bcp (SQL Server).
Ejemplo de importación de un valor numérico que utiliza notación científica
El usuario desea importar masivamente datos en la tabla t_float. El archivo de datos (C:\
t_float-c.dat) contiene datos float con notación científica; por ejemplo:
8.0000000000000002E-28.0000000000000002E-2
No obstante, BULK INSERT no puede importar estos datos directamente en t_float, ya que
su segunda columna, c2, utiliza el tipo de datos decimal. Por lo tanto, es necesario un
archivo de formato. El archivo de formato debe asignar los datos float con notación
científica al formato decimal de la columna c2.
El siguiente archivo de formato utiliza el tipo de datos SQLFLT8 para asignar el segundo
campo de datos a la segunda columna:
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
Comentarios generales
Para obtener una comparación de la instrucción BULK INSERT, la instrucción INSERT ...
SELECT * FROM OPENROWSET(BULK...) y el comando bcp, vea Importar y exportar
datos de forma masiva (SQL Server).
Para obtener información sobre cómo preparar los datos para la importación masiva, vea
Preparar los datos para exportar o importar de forma masiva (SQL Server).
La instrucción BULK INSERT se puede ejecutar en una transacción definida por el usuario
para importar datos en una tabla o una vista. Opcionalmente, para utilizar varias
coincidencias para la importación masiva de datos, una transacción puede especificar la
cláusula BATCHSIZE en la instrucción BULK INSERT. Si una transacción de varios lotes
se revierte, cada lote que la transacción ha enviado a SQL Server se revierte.
Interoperabilidad
Importar datos desde un archivo CSV
Las operaciones de importación masiva de SQL Server no admiten los archivos de valores
separados por comas (CSV). Sin embargo, en algunos casos se puede utilizar un archivo de
valores separados por comas (CSV) como archivo de datos para una importación masiva de
datos en SQL Server. Para obtener información acerca de los requisitos para importar datos
de un archivo de datos CSV, vea Preparar los datos para exportar o importar de forma
masiva (SQL Server).
Restricciones
Cuando se usa un archivo de formato con BULK INSERT, solo se puede especificar un
máximo de 1024 campos. Es el mismo número máximo de columnas permitido en una
tabla. Si usa BULK INSERT con un archivo de datos que contenga más de 1024 campos,
BULK INSERT genera el error 4822. La utilidad bcp no tiene esta limitación, por lo que
para los archivos de datos que contengan más de 1024 campos use el comando bcp.
Consideraciones de rendimiento
Si el número de páginas que van a vaciarse en un único lote supera un umbral interno,
podría producirse un examen completo del grupo de búferes para identificar qué páginas se
han de vaciar cuando el lote se confirme. Este examen completo puede afectar de forma
desfavorable al rendimiento de la importación masiva. Un caso en el que es probable que se
supere el umbral interno se produce cuando un grupo de búferes grande se combina con un
subsistema de E/S lento. Para evitar los desbordamientos del búfer en equipos grandes, no
utilice la sugerencia TABLOCK (que quita la optimización masiva) o use un tamaño de lote
menor (que la preserva).
Dado que los equipos varían, es recomendable que pruebe varios tamaños de lote con la
carga de datos para averiguar lo que funciona mejor en su caso.
Seguridad
Delegación de cuentas de seguridad (suplantación)
Si al ejecutar la instrucción BULK INSERT utiliza sqlcmd u osql desde un equipo e inserta
datos en SQL Server en un segundo equipo y especifica data_file en un tercer equipo con
una ruta de acceso UNC, es posible que reciba el error 4861.
Para resolver este error, utilice la autenticación de SQL Server y especifique un inicio de
sesión de SQL Server, que utiliza el perfil de seguridad de la cuenta del proceso de SQL
Server, o bien configure Windows para habilitar la delegación de la cuenta de seguridad.
Para obtener información acerca de cómo habilitar una cuenta de usuario para que sea de
confianza para la delegación, vea la Ayuda de Windows.
Para obtener más información acerca de esta y otras consideraciones de seguridad en el uso
de BULK INSERT, vea Importar de forma masiva datos mediante BULK INSERT u
OPENROWSET(BULK...) (SQL Server).
Permisos
Nota
De manera predeterminada no se activan los desencadenadores. Para activar los
desencadenadores explícitamente, use la opción FIRE_TRIGGER.
Se utiliza la opción KEEPIDENTITY para importar el valor de identidad de un
archivo de datos.
Ejemplos
A.Usar canalizaciones para importar datos de un archivo
En el siguiente ejemplo se importa un archivo que utiliza el salto de línea como terminador
de fila, igual que en una salida de UNIX:
Otros ejemplos
bcp (utilidad)
INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
sp_tableoption (Transact-SQL)
Conceptos