Publicado el :
ETL FICHIER_COMPRESSE_EXTERNE

Cargar un archivo CSV desde un archivo GZ

Este código también está disponible en: Deutsch English Français
La acción `table.loadTable` es una función clave del conjunto de acciones 'table' en SAS© Viya, que permite la importación de datos de varias fuentes al servidor CAS. Este ejemplo se centra en la carga de archivos CSV que han sido comprimidos individualmente usando gzip (.gz). La opción `archiveType='gz'` es crucial para indicar al servidor CAS cómo descomprimir el archivo antes de procesar el contenido CSV. El uso de `getNames=true` permite detectar automáticamente los nombres de las columnas a partir de la primera línea del archivo CSV. Para que los ejemplos sean ejecutables, asegúrese de crear un archivo CSV, comprimirlo en GZ (por ejemplo, `gzip mi_archivo.csv` que producirá `mi_archivo.csv.gz`), y colocarlo en una ruta del sistema de archivos accesible por el servidor CAS a través de la caslib especificada (por ejemplo, `/tmp/cas_data_gz/`).
Análisis de datos

Type : FICHIER_COMPRESSE_EXTERNE


Los ejemplos requieren la creación previa de un archivo CSV, su compresión en GZ y su colocación en un directorio del sistema de archivos accesible por el servidor CAS.

1 Bloque de código
PROC CAS / table.loadTable
Explicación :
Este ejemplo ilustra la carga básica de un archivo CSV comprimido en GZ. Configura una caslib temporal que apunta a una ruta local en el servidor CAS. Luego, utiliza `table.loadTable` con `fileType='csv'` y `archiveType='gz'` para descomprimir y cargar el archivo. `getNames=true` indica que la primera línea del CSV contiene los nombres de las columnas. Se realiza una verificación rápida con `table.fetch`, seguida de una limpieza de los recursos CAS.
¡Copiado!
1/* Préparation requise par l'utilisateur: */
2/* Créez un fichier 'sample_data.csv' avec le contenu suivant: */
3/* id,name,value */
4/* 1,Alice,100 */
5/* 2,Bob,150 */
6/* 3,Charlie,200 */
7/* Compressez-le: `gzip sample_data.csv` pour obtenir 'sample_data.csv.gz'. */
8/* Placez 'sample_data.csv.gz' dans le répertoire '/tmp/cas_data_gz/' accessible par le serveur CAS. */
9 
10PROC CAS;
11 /* Ajout d'une caslib temporaire pour l'exemple */
12 /* Remplacez '/tmp/cas_data_gz' par un chemin accessible et inscriptible par le serveur CAS */
13 TABLE.addCaslib /
14 name="mycaslib"
15 dataSource={srcType="path"},
16 path="/tmp/cas_data_gz";
17 
18 /* Chargement du fichier GZ contenant un CSV */
19 TABLE.loadTable /
20 caslib="mycaslib",
21 path="sample_data.csv.gz",
22 importOptions={
23 fileType="csv",
24 archiveType="gz",
25 getNames=true
26 },
27 casout={
28 name="mydata_basic",
29 replace=true
30 };
31 
32 /* Vérification du chargement (affiche les 5 premières lignes) */
33 TABLE.fetch /
34 TABLE={name="mydata_basic"},
35 maxRows=5;
36 
37 /* Nettoyage: Suppression de la table chargée */
38 TABLE.dropTable /
39 caslib="mycaslib",
40 name="mydata_basic";
41 
42 /* Nettoyage: Suppression de la caslib temporaire */
43 TABLE.dropCaslib /
44 caslib="mycaslib";
45RUN;
2 Bloque de código
PROC CAS / table.loadTable
Explicación :
Este ejemplo demuestra cómo cargar un archivo CSV comprimido en GZ cuando el delimitador no es la coma estándar. La opción `delimiter=';'` se utiliza para especificar el punto y coma. También se especifica la codificación `UTF-8`, lo cual es una buena práctica para garantizar la compatibilidad de los caracteres. Se incluyen los pasos de verificación y limpieza.
¡Copiado!
1/* Préparation requise par l'utilisateur: */
2/* Créez un fichier 'sample_data_semicolon.csv' avec le contenu suivant: */
3/* id;name;value */
4/* 1;Alice;100 */
5/* 2;Bob,150 */
6/* 3;Charlie;200 */
7/* Compressez-le: `gzip sample_data_semicolon.csv` pour obtenir 'sample_data_semicolon.csv.gz'. */
8/* Placez 'sample_data_semicolon.csv.gz' dans le répertoire '/tmp/cas_data_gz/' accessible par le serveur CAS. */
9 
10PROC CAS;
11 /* Ajout d'une caslib temporaire pour l'exemple */
12 TABLE.addCaslib /
13 name="mycaslib"
14 dataSource={srcType="path"},
15 path="/tmp/cas_data_gz";
16 
17 /* Chargement du fichier GZ contenant un CSV avec délimiteur personnalisé */
18 TABLE.loadTable /
19 caslib="mycaslib",
20 path="sample_data_semicolon.csv.gz",
21 importOptions={
22 fileType="csv",
23 archiveType="gz",
24 getNames=true,
25 delimiter=";", /* Spécifie le point-virgule comme délimiteur */
26 encoding="UTF-8" /* Spécifie l'encodage du fichier */
27 },
28 casout={
29 name="mydata_custom_delimiter",
30 replace=true
31 };
32 
33 /* Vérification du chargement (affiche les 5 premières lignes) */
34 TABLE.fetch /
35 TABLE={name="mydata_custom_delimiter"},
36 maxRows=5;
37 
38 /* Nettoyage: Suppression de la table chargée */
39 TABLE.dropTable /
40 caslib="mycaslib",
41 name="mydata_custom_delimiter";
42 
43 /* Nettoyage: Suppression de la caslib temporaire */
44 TABLE.dropCaslib /
45 caslib="mycaslib";
46RUN;
3 Bloque de código
PROC CAS / table.loadTable
Explicación :
Este ejemplo utiliza opciones avanzadas para optimizar el proceso de carga y la detección del esquema de datos. `guessingRows=500` fuerza a CAS a analizar las primeras 500 líneas para determinar los tipos y longitudes de las columnas, útil para archivos voluminosos con datos heterogéneos. `nRows=100000` puede ayudar a estimar el tamaño. `blocksize='1M'` ajusta el tamaño de los bloques de lectura para un mejor rendimiento. Luego se utiliza `table.columnInfo` para inspeccionar el esquema detectado.
¡Copiado!
1/* Préparation requise par l'utilisateur: */
2/* Créez un fichier 'sample_data_large.csv' avec le même contenu que 'sample_data.csv' ou plus de lignes. */
3/* Compressez-le: `gzip sample_data_large.csv` pour obtenir 'sample_data_large.csv.gz'. */
4/* Placez 'sample_data_large.csv.gz' dans le répertoire '/tmp/cas_data_gz/' accessible par le serveur CAS. */
5 
6PROC CAS;
7 /* Ajout d'une caslib temporaire pour l'exemple */
8 TABLE.addCaslib /
9 name="mycaslib"
10 dataSource={srcType="path"},
11 path="/tmp/cas_data_gz";
12 
13 /* Chargement avec des options avancées de détection de schéma et de performance */
14 TABLE.loadTable /
15 caslib="mycaslib",
16 path="sample_data_large.csv.gz",
17 importOptions={
18 fileType="csv",
19 archiveType="gz",
20 getNames=true,
21 guessingRows=500, /* Augmente le nombre de lignes pour une meilleure détection du type de colonnes */
22 nRows=100000, /* Indique le nombre de lignes à lire si le fichier est très grand (pour l'estimation) */
23 blocksize="1M" /* Spécifie la taille des blocs de lecture pour optimiser les performances */
24 },
25 casout={
26 name="mydata_perf_options",
27 replace=true
28 };
29 
30 /* Vérification des informations des colonnes de la table chargée */
31 TABLE.columnInfo /
32 TABLE={name="mydata_perf_options"};
33 
34 /* Nettoyage: Suppression de la table chargée */
35 TABLE.dropTable /
36 caslib="mycaslib",
37 name="mydata_perf_options";
38 
39 /* Nettoyage: Suppression de la caslib temporaire */
40 TABLE.dropCaslib /
41 caslib="mycaslib";
42RUN;
4 Bloque de código
PROC CAS / table.loadTable
Explicación :
Este ejemplo explora el manejo de errores y la verificación en un entorno CAS. Intenta cargar un archivo CSV comprimido en GZ que podría contener errores de formato. Se incluyen opciones como `maxRows` y `nthreads`. Después del intento de carga, se utiliza `table.tableInfo` para obtener metadatos sobre la tabla, incluidas las indicaciones de posibles problemas. `table.fetch` muestra los datos si la carga fue exitosa. El objetivo es mostrar cómo el servidor CAS reacciona a los datos mal formados y cómo se puede recuperar la información para la depuración. El usuario debe consultar el registro CAS para obtener mensajes de error detallados.
¡Copiado!
1/* Préparation requise par l'utilisateur: */
2/* Créez un fichier 'sample_data_error.csv' avec un format intentionnellement incorrect (ex: ligne manquante ou colonne supplémentaire) */
3/* id,name,value */
4/* 1,Alice,100 */
5/* 2,Bob,150,extra */
6/* 3,Charlie */
7/* Compressez-le: `gzip sample_data_error.csv` pour obtenir 'sample_data_error.csv.gz'. */
8/* Placez 'sample_data_error.csv.gz' dans le répertoire '/tmp/cas_data_gz/' accessible par le serveur CAS. */
9 
10PROC CAS;
11 /* Ajout d'une caslib temporaire pour l'exemple */
12 TABLE.addCaslib /
13 name="mycaslib"
14 dataSource={srcType="path"},
15 path="/tmp/cas_data_gz";
16 
17 /* Tentative de chargement d'un fichier avec des erreurs potentielles */
18 /* Des options comme `addrowid=true` ou `maxerrs` peuvent être utiles pour le débogage */
19 TABLE.loadTable /
20 caslib="mycaslib",
21 path="sample_data_error.csv.gz",
22 importOptions={
23 fileType="csv",
24 archiveType="gz",
25 getNames=true,
26 maxRows=100, /* Limite les lignes lues pour éviter de surcharger en cas de problème */
27 nthreads=4 /* Utilise plusieurs threads pour le chargement */
28 },
29 casout={
30 name="mydata_error_check",
31 replace=true
32 };
33 
34 /* Vérification de l'état de la table et des messages d'erreur si le chargement a échoué */
35 TABLE.tableInfo /
36 caslib="mycaslib",
37 name="mydata_error_check";
38 
39 /* Si le chargement est réussi, afficher les données, sinon, inspecter le log CAS */
40 TABLE.fetch /
41 TABLE={name="mydata_error_check"}
42 ;
43 
44 /* Nettoyage: Suppression de la table chargée */
45 TABLE.dropTable /
46 caslib="mycaslib",
47 name="mydata_error_check";
48 
49 /* Nettoyage: Suppression de la caslib temporaire */
50 TABLE.dropCaslib /
51 caslib="mycaslib";
52RUN;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.