Traducción no actualizada
La información siguiente ayuda a comprender el concepto de grupos, vías de acceso de archivos y particiones:
Componentes clave de Cloud Object Storage
Prácticas preferidas para el diseño de particiones
Introducción
Dónde y cómo se almacenan los datos en IBM Cloud Object Storage (COS) puede influir directamente en el rendimiento de las consultas y en la utilización de los recursos. Los grupos y las particiones desempeñan papeles importantes en la organización de datos.
Veamos los componentes de COS para entender cómo almacenar mejor los datos para un rendimiento óptimo de las consultas. Utilizaremos los datos de ejemplo de Clickstream para demostrar algunas estrategias de partición. El siguiente fragmento de código es un ejemplo del esquema de datos de origen en formato JSON:
{
customer_id": "12649",
"time_stamp": "2018-01-02 12:33:43",
"click_event_type": "add_to_cart",
“product_name": "Office Supplies",
"product_category": "Home Products",
"product_price": "12.99",
"total_price_of_basket": "41.54",
"total_number_of_items_in_basket": "6",
"total_number_of_distinct_items_in_basket": "2"
}
Componentes clave de Cloud Object Storage
Los siguientes componentes son componentes clave de Cloud Object Storage.
Grupo
Un grupo es una abstracción lógica que se utiliza para proporcionar un "contenedor" para los datos. Los grupos se crean solo en COS. Por ejemplo, puede crear un grupo llamado "blackfriday" para que sea el contenedor de todos los datos en streaming de las ventas del almacén Black Friday y otro grupo llamado "postxmas" para las ventas de tiendas el 26 de diciembre. Cree un tercer grupo que se denomina "clickstream" para contener datos en streaming sobre todas las actividades de ventas en línea.
Seleccione el grupo que desea utilizar en el panel Propiedades del operador de COS en el lienzo del flujo de secuencias. Cuando configure el operador de Cloud Object Storage operator para el flujo de secuencias en el lienzo, pulse situado junto al campo Vía de acceso de archivo. Se abre la ventana Seleccionar activo de datos.
Importante
En la ventana Seleccionar activo de datos, puede ver todos los grupos en la instancia de COS, pero solo puede acceder a los grupos que tienen la misma ubicación que el URL del conector de COS que ha seleccionado.
Para ver a qué grupos puede acceder, realice los siguientes pasos. Sugerencia: Utilice dos ventanas del navegador para trabajar en paralelo.
-
En la primera ventana del navegador, obtenga el punto final de COS realizando los siguientes pasos:
a. Vaya a la página Proyectos del proyecto y, a continuación, pulse el separador Activos.
b. En la sección Actividades de datos, pulse Cloud Object Storage.
c. En la ventana Editar conexión, vaya al campo URL de inicio de sesión y, a continuación, anote la serie inmediatamente después de
https://s3
. Por ejemplo, si el valor URL de inicio de sesión eshttps://s3.eu-geo.objectstorage.softlayer.net
, la serie a anotar eseu-geo
. -
En la segunda ventana del navegador, busque los grupos a los que se puede acceder realizando los pasos siguientes:
a. Vaya al panel de control de IBM Cloud.
b. Pulse el nombre del servicio Cloud Object Storage. Se abre la ventana Grupos y lista todos los grupos y sus ubicaciones.
c. En la columna LOCATION, anote las ubicaciones que coincidan con la serie del URL de COS del paso 1c. Solo se puede acceder a estos grupos. En nuestro ejemplo, solo se puede acceder a los grupos
clickstream
ycrossregion0eu0geo
porque su ubicación eseu-geo
.
La conexión con cualquier otro grupo, por ejemplo, crossregion0ap0geo
, proporciona el siguiente mensaje:
Not_found: this error occurred while accessing the connectors service: The assets request failed:
CDICO2015E: The crossregion0ap0geo container does not exist or you do not have sufficient permissions.
Vía de acceso de archivo
La vía de acceso de archivo es la vía de acceso completa del archivo donde desea almacenar los datos. La vía de acceso de archivo incluye el nombre de grupo, una vía de acceso de archivo opcional, un nombre de carpeta opcional y el nombre de archivo.
Las siguientes vías de acceso de archivo son ejemplos de vías de acceso de archivo válidas:
- /my_bucket/my_folder/my_file.csv
- /my_bucket/my_new_folder/my_new_file.csv
En el campo Vía de acceso de archivo, puede crear carpetas y archivos en grupos existentes. Para este ejemplo, llamemos a nuestro nombre de archivo "%TIME.parquet" y colocaremos datos en un grupo llamado "clickstream". Hablaremos sobre la variable del sistema %TIME en la siguiente sección.
Puede añadir variables del sistema (%TIME, %OBJECTNUM y %PARTITIONS) a la vía de acceso de archivo para que sea exclusiva y para mejorar el rendimiento de las consultas.
Examinemos cada una de las variables del sistema.
%TIME es la hora en que se crea el objeto COS. El formato de hora predeterminado es aaaaMMdd_HHmmss
.
La variable de sistema %TIME se puede añadir en cualquier lugar de la vía de acceso después del nombre de grupo. Incluso puede ser el nombre del archivo. La variable suele utilizarse para crear nombres de archivos dinámicos cuando espera que la aplicación cree varios archivos.
Las siguientes vías de acceso de archivo son ejemplos de vías de acceso de archivo válidas con %TIME.
- /my_bucket/event_%TIME.parquet
- /my_bucket/%TIME.parquet
- /my_bucket/my_new_folder/my_new_file_%TIME.csv
- /my_bucket/geo/uk/geo_%TIME.parquet
- /my_bucket/geo/uk/my_new_folder/%TIME_event.parquet
%OBJECTNUM es un número de objeto, a partir de 0, cuando se crea un nuevo objeto para grabar. Los objetos con el mismo nombre se sobrescribirán. Normalmente, se añade %OBJECTNUM después del nombre de archivo.
Las siguientes vías de acceso de archivo son ejemplos de vías de acceso válidas con %OBJECTNUM.
- /my_bucket/event_%OBJECTNUM.parquet
- /my_bucket/geo/uk/geo_%OBJECTNUM.parquet
- /my_bucket/%OBJECTNUM_event.csv
- /my_bucket/%OBJECTNUM_%TIME.csv
Nota: Si se utiliza el particionamiento, %OBJECNUM se gestiona globalmente para todas las particiones en el objeto COS, en lugar de independientemente para cada partición.
Partición
Una partición son datos agrupados por un atributo común en el esquema de entrada. Cuando configura el operador Cloud Object Storage en el lienzo del flujo de secuencias, crea y añade particiones a grupos.
Utilice particiones cuando necesite reducir la cantidad de datos que las consultas deben procesar. El streaming proporciona acceso a cantidades masivas de datos. La consulta del conjunto de datos completo podría no ser posible o incluso necesaria. Para mejorar el rendimiento de la consulta, rompa los datos en fragmentos o particiones y, a continuación, consulte la partición que necesite.
Por ejemplo, es posible que desee obtener información sobre los usuarios de la compra en línea que han colocado un elemento en su carro. La primera partición es “click_event_type” por lo que puede consultar el suceso "add_to_cart" de Clickstream. A continuación, añada la partición "customer_id" porque desea analizar el comportamiento de compra en línea de cada cliente.
Recuerde que hemos definido la vía de acceso del archivo utilizando un grupo existente y un nuevo nombre de archivo basado en el tiempo.
Cuando se ejecuta el flujo de secuencias, COS coloca automáticamente las particiones "click_event_type" y "customer_id" inmediatamente antes de la última parte del nombre del objeto, "%TIME.parquet". Como resultado, el objeto en COS es clickstream/click_event_type/customer_id/ %TIME.parquet
tal como se muestra en la siguiente captura de pantalla.
Valores de partición no válidos
Si un valor de una partición no es válido o falta, se sustituye por la serie __HIVE_DEFAULT_PARTITION__
en la lista de nombres de objetos de COS en COS.
Por ejemplo, si el valor de "customer_id" no es válido o falta, "customer_id" puede ser clickstream/click_event_type=add_to_cart/customer_id=__HIVE_DEFAULT_PARTITION__/20171022_124948.parquet
.
%PARTITIONS coloca las particiones que ha definido en cualquier lugar del nombre del objeto en COS.
De forma predeterminada, las particiones se colocan inmediatamente antes de la última parte del nombre del objeto y en el orden en que se crearon. Puede cambiar la ubicación de estas particiones (pero no su orden) en el nombre del objeto COS utilizando la variable del sistema %PARTITIONS.
En nuestro ejemplo, la partición click_event_type
es la primera, seguida de la partición customer_id
. De forma predeterminada, ambas se colocan antes de %TIME.parquet
.
Ejemplo de la posición predeterminada de las particiones en un nombre de objeto
Supongamos que la vía de acceso del archivo es clickstream/store_location/ %TIME.parquet
. Ha añadido la carpeta store_location
y ha definido las particiones click_event_type
y customer_id
.
El NOMBRE DE OBJETO en COS sería algo parecido a
clickstream/store_location/click_event_type=add_to_cart/customer_id=13579/20171022_124948.parquet
.
Veamos cómo cambia la ubicación de la partición utilizando %PARTITIONS. Supongamos que la vía de acceso del archivo ahora es clickstream/%PARTITIONS/store_location/ %TIME.parquet
.
El NOMBRE DE OBJETO en COS sería clickstream/click_event_type=add_to_cart/customer_id=13579/store_location/20171022_124948.parquet
.
Prácticas preferidas para el diseño de particiones
Ahora que entendemos los componentes básicos de COS, veamos cómo podemos diseñar particiones para mejorar el rendimiento de las consultas y optimizar la utilización de recursos.
Principios generales para el diseño de particiones
-
Piense en qué tipo de consultas necesita. Por ejemplo, es posible que necesite crear informes mensuales o ventas por línea de producto.
-
No defina una partición en un atributo para que termine con demasiadas particiones. La reducción del número de particiones puede mejorar en gran medida el rendimiento y el consumo de recursos.
-
No defina una partición en un atributo para que termine con muchos archivos pequeños.
Las siguientes preguntas pueden ayudarle a implementar estos principios
-
¿Qué atributo se consulta más a menudo?
Añada el atributo que se consulta más a menudo como la primera partición para que vaya inmediatamente después del nombre del grupo. En el ejemplo anterior, queríamos informar sobre los usuarios en línea que añaden elementos a su carro de la compra, por lo que "click_event_type" fue la primera partición.
-
¿Cómo se ingieren los datos?
Si los datos están organizados por atributos, es posible que un atributo sea una buena partición.
-
¿Se puede dividir el atributo de la fecha en año, mes y día?
Si es así, utilice un operador Código para crear nuevos atributos para el año, el mes y el día. Estos nuevos atributos deben estar en el esquema de salida del operador Código que se introduce en COS. A continuación, puede hacer una partición en uno de los nuevos atributos. Los nuevos atributos no existen en los datos en streaming originales, pero sí existen en la partición de COS.
Por ejemplo, en el operador Código, divida el atributo "time_stamp" en tres nuevos atributos denominados "AAAA", "MM" y "DD". En lugar de particionar “time_stamp”, particione “AAAA”. Este particionamiento genera menos archivos pero más grandes.
-
¿Tiene los datos una baja cardinalidad, es decir, unos pocos valores posibles?
Los datos con una cardinalidad baja son adecuados para el particionamiento. En los datos de ejemplo de Clickstream, "time_stamp", "session_duration" y "product_price" suelen tener una alta cardinalidad, por lo que no son adecuados para el particionamiento. "Product_category" tiene una cardinalidad baja, por lo que es un candidato adecuado.
-
¿Cuántas particiones está planificando?
El particionamiento mediante demasiados atributos da como resultado muchos archivos de tamaño pequeño. Como resultado, el rendimiento de las consultas se hace más lento y consumo de recursos es alto.
Normalmente, es adecuado un tamaño de partición de aproximadamente 1 GB.