Saltar al contenido principal Saltar al contenido complementario

Trabajar con archivos Apache Parquet

Apache Parquet es un formato de almacenamiento en columnas, altamente eficiente para almacenar y consultar grandes conjuntos de datos. En Qlik Sense, puede leer datos de archivos Parquet y almacenar tablas como archivos de Parquet .

Parquet permite consultas eficientes de columnas específicas en una tabla en lugar de leer toda la tabla. Esto lo hace muy adecuado para su uso con el procesamiento de big data. Además, Parquet admite una compresión y codificación de datos eficientes. Esto puede reducir aún más el espacio de almacenamiento y mejorar el rendimiento de las consultas.

Crear archivos Parquet

Puede crear archivos Parquet usando el comando Store en el script. Indique simplemente en el script que desea exportar una tabla anteriormente leída, o parte de ella, a un nombre de archivo explícito, en una ubicación de su elección. Puede anidar los datos que almacena en archivos Parquet.

Para más información, vea Store.

Leer datos desde archivos Parquet

Puede leer datos de un archivo Parquet como lo haría con cualquier otro archivo de datos compatible con Qlik Sense. Esto incluye al Gestor de datos, el Editor de carga de datos o cuando agrega datos a una nueva app.

Para más información, vea Cargar datos desde archivos.

También puede cargar datos desde un archivo Parquet en el script de carga de datos con el comando LOAD. Por ejemplo:

LOAD * from [lib://DataFiles/xyz.parquet] (parquet);

Para más información, vea Load.

Cargar datos desde archivos Parquet anidados

Si un archivo Parquet contiene datos anidados, es necesario cargarlos en varias sentencias de carga, cada una especificando qué subconjunto debe cargarse en cada tabla. El especificador Table is se utiliza para demostrar una ruta al nodo del grupo en el esquema que se va a cargar.

Puede utilizar el especificador Delimiter is para especificar cómo se deben combinar los nodos. Una sentencia LOAD que carga un archivo con datos anidados que no incluye un delimitador utiliza ese valor especificado en la variable de script FieldNameDelimiter. Si no se proporciona ningún delimitador y no se establece FieldNameDelimiter, entonces el delimitador predeterminado será '.'.

Solo se cargan los nodos que coincidan con la ruta de Table is.

Los nodos de datos se cargan en un archivo sin anidamiento.

Los nodos de grupo agruparán los campos del grupo añadiendo su nombre al nombre del campo. Por ejemplo, un grupo con field1 y field2 se cargan como group.field1 y group.field2.

Los nodos de lista generarán campos clave que se utilizarán para enlazar las tablas. Por ejemplo, %Key_group.list.Cualquier grupo o nodo de datos de la lista necesita cargarse en una sentencia load aparte. También se añadirá un campo clave a la lista de padres.

Los siguientes ejemplos muestran el mismo archivo Parquet anidado, creado en el ejemplo de Almacenar datos anidados en archivos Parquet, cargado en una aplicación, utilizando Gestor de datos y Editor de carga de datos (con la secuencia de script predeterminada de Seleccionar datos y secuencia de script personalizada).

Ejemplo: Gestor de datos

Si carga customer.parquet en Gestor de datos y aplica todas las asociaciones recomendadas, se obtiene el siguiente modelo de datos:

Modelo de datos para cargar company.parquet con el Gestor de datos

Modelo de datos que muestra las tablas company:salesrep.salesrep, company, company:headquarter.headquarter, y company:headquarter.headquarter.city:region.region

Ejemplo: Editor de carga de datos (Seleccionar datos)

Si carga los datos mediante Seleccionar datos en Editor de carga de datos, se obtiene el siguiente script:

LOAD company, contact, "%Key_company:headquarter", "%Key_company:salesrep" FROM [lib://DataFiles/company.parquet] (parquet); LOAD country, city, "%Key_city:region", "%Key_company:headquarter" FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter]); LOAD region, "%Key_city:region" FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter.city:region.region]); LOAD salesrep, "%Key_company:salesrep" FROM [lib://DataFiles/company.parquet] (parquet, table is [company:salesrep.salesrep]);

El modelo de datos presentará este aspecto en el Visor del modelo de datos.

Modelo de datos para cargar company.parquet con Seleccionar datos en Editor de carga de datos

Modelo de datos que muestra las tablas salesrep, company, headquarter y region.

Ejemplo: Editor de carga de datos (Script de carga personalizado)

Si utiliza un script de carga personalizado, tendrá más control sobre cómo se cargan los campos y las tablas desde customer.parquet. El siguiente script de carga carga las tablas y los campos desde company.parquet:

LOAD * FROM [lib://DataFiles/company.parquet] (parquet); LOAD *, Lookup('company', '%Key_company:salesrepo', [%Key_company:salesrep], 'company') as company; LOAD * FROM [lib://DataFiles/company.parquet] (parquet, table is [company:salesrep.salesrep]); DROP FIELD [%Key_company:salesrep]; LOAD *, Lookup('company', '%Key_company:headquarter', [%Key_company:headquarter], 'company') as company; LOAD * FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter]); DROP FIELD [%Key_company:headquarter]; LOAD *, Lookup('city', '%Key_city:region', [%Key_city:region], 'headquarter') as city; LOAD * FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter.city:region.region]); DROP FIELD [%Key_city:region];

Esto da como resultado el siguiente modelo de datos, que es idéntico al modelo de datos original antes de que los datos se almacenaran en el archivo Parquet.

Modelo de datos para cargar company.parquet con un script personalizado en Editor de carga de datos

Modelo de datos con las tablas headquarter, region, salesrep y company, que refleja el modelo de datos exacto de la aplicación de origen.

Limitaciones

Los archivos Parquet tienen las siguientes limitaciones:

  • Es posible que los archivos de Parquet que contienen un campo de marca de tiempo int96 no se carguen correctamente.

    Int96 es un tipo de datos obsoleto que contiene una marca de tiempo sin información de zona horaria. Se intentará leer el campo como UTC, pero como existen diferentes implementaciones de proveedores, no hay garantía de éxito.

    Verifique los datos cargados y ajústelos a la zona horaria correcta con un desplazamiento si es necesario.

¿Esta página le ha sido útil?

No dude en indicarnos en qué podemos mejorar si encuentra algún problema en esta página o su contenido, como, por ejemplo, errores tipográficos, pasos que falta o errores técnicos.