Cargar datos desde exportaciones de Firestore
BigQuery admite la carga de datos de Firestore exportados mediante el servicio de importación y exportación gestionado de Firestore. El servicio de importación y exportación gestionado exporta documentos de Firestore a un segmento de Cloud Storage. Después, puede cargar los datos exportados en una tabla de BigQuery.
Limitaciones
Cuando cargas datos en BigQuery desde una exportación de Firestore, ten en cuenta las siguientes restricciones:
- El conjunto de datos debe estar en la misma ubicación que el segmento de Cloud Storage que contiene los archivos de exportación.
- Solo puedes especificar un URI de Cloud Storage y no puedes usar un comodín de URI.
- Para que una exportación de Firestore se cargue correctamente, los documentos de los datos exportados deben compartir un esquema coherente con menos de 10.000 nombres de campo únicos.
- Puedes crear una tabla para almacenar los datos o sobrescribir una que ya tengas. No puedes añadir datos de exportación de Firestore a una tabla que ya tengas.
- Tu comando de exportación
debe especificar un filtro
collection-ids
. Los datos exportados sin especificar un filtro de ID de colección no se pueden cargar en BigQuery.
Antes de empezar
Concede roles de gestión de identidades y accesos (IAM) que proporcionen a los usuarios los permisos necesarios para realizar cada tarea de este documento.
Permisos obligatorios
Para cargar datos en BigQuery, necesitas permisos de gestión de identidades y accesos para ejecutar un trabajo de carga y cargar datos en tablas y particiones de BigQuery. Si cargas datos desde Cloud Storage, también necesitas permisos de IAM para acceder al segmento que contiene tus datos.
Permisos para cargar datos en BigQuery
Para cargar datos en una tabla o partición de BigQuery, o bien para añadir o sobrescribir una tabla o partición, necesitas los siguientes permisos de gestión de identidades y accesos:
bigquery.tables.create
bigquery.tables.updateData
bigquery.tables.update
bigquery.jobs.create
Cada uno de los siguientes roles de gestión de identidades y accesos predefinidos incluye los permisos que necesitas para cargar datos en una tabla o partición de BigQuery:
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
(incluye el permisobigquery.jobs.create
)bigquery.user
(incluye el permisobigquery.jobs.create
)bigquery.jobUser
(incluye el permisobigquery.jobs.create
)
Además, si tienes el permiso bigquery.datasets.create
, puedes crear y actualizar tablas mediante un trabajo de carga en los conjuntos de datos que crees.
Para obtener más información sobre los roles y permisos de IAM en BigQuery, consulta el artículo sobre funciones y permisos predefinidos.
Permisos para cargar datos desde Cloud Storage
Para obtener los permisos que necesitas para cargar datos desde un segmento de Cloud Storage, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de Storage (roles/storage.admin
) en el segmento.
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
Este rol predefinido contiene los permisos necesarios para cargar datos desde un segmento de Cloud Storage. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:
Permisos obligatorios
Para cargar datos desde un segmento de Cloud Storage, se necesitan los siguientes permisos:
-
storage.buckets.get
-
storage.objects.get
-
storage.objects.list (required if you are using a URI wildcard)
También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.
Cargar datos del servicio de exportación de Firestore
Puedes cargar datos desde un archivo de metadatos de exportación de Firestore mediante la Google Cloud consola, la herramienta de línea de comandos bq o la API.
A veces, se usa la terminología de Datastore en la Google Cloud consola y en la herramienta de línea de comandos bq, pero los siguientes procedimientos son compatibles con los archivos de exportación de Firestore. Firestore y Datastore comparten un formato de exportación.
Consola
En la Google Cloud consola, ve a la página BigQuery.
- En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.
- En la sección Información del conjunto de datos, haz clic en Crear tabla.
- En el panel Crear tabla, especifica los siguientes detalles:
- En la sección Fuente, selecciona Google Cloud Storage en la lista Crear tabla a partir de.
A continuación, siga estos pasos:
- Selecciona un archivo del segmento de Cloud Storage o introduce el URI de Cloud Storage.
No puedes incluir varias URIs en la consola Google Cloud , pero sí caracteres comodín. El segmento de Cloud Storage debe estar en la misma ubicación que el conjunto de datos que contiene la tabla que quieres crear, añadir o sobrescribir.
El URI del archivo de exportación de Firestore debe terminar conKIND_COLLECTION_ID.export_metadata
. Por ejemplo, endefault_namespace_kind_Book.export_metadata
,Book
es el ID de la colección ydefault_namespace_kind_Book
es el nombre de archivo generado por Firestore. Si el URI no termina conKIND_COLLECTION_ID.export_metadata
, recibirás el siguiente mensaje de error: does not contain valid backup metadata. (código de error: no válido). - En Formato de archivo, selecciona Copia de seguridad de Cloud Datastore. Firestore y Datastore comparten el formato de exportación.
- Selecciona un archivo del segmento de Cloud Storage o introduce el URI de Cloud Storage.
No puedes incluir varias URIs en la consola Google Cloud , pero sí caracteres comodín. El segmento de Cloud Storage debe estar en la misma ubicación que el conjunto de datos que contiene la tabla que quieres crear, añadir o sobrescribir.
- En la sección Destino, especifica los siguientes detalles:
- En Conjunto de datos, selecciona el conjunto de datos en el que quieras crear la tabla.
- En el campo Tabla, introduce el nombre de la tabla que quieras crear.
- Verifica que el campo Tipo de tabla sea Tabla nativa.
- En la sección Esquema, no es necesario que haga nada. El esquema se infiere para una exportación de Firestore.
- Opcional: Especifica la configuración de partición y clúster. Para obtener más información, consulta los artículos sobre cómo crear tablas con particiones y cómo crear y usar tablas agrupadas en clústeres.
- Haz clic en Opciones avanzadas y haz lo siguiente:
- En Write preference (Preferencia de escritura), deja seleccionada la opción Write if empty (Escribir si está vacía). Con esta opción se crea una tabla y se cargan los datos en ella.
- Si quieres ignorar los valores de una fila que no estén presentes en el esquema de la tabla, selecciona Valores desconocidos.
- En Encriptado, haz clic en Clave gestionada por el cliente para usar una clave de Cloud Key Management Service. Si dejas el ajuste Google-managed key, BigQuery cifra los datos en reposo.
- Haz clic en Crear tabla.
bq
Usa el comando bq load
con source_format
definido como DATASTORE_BACKUP
.
Proporcione la marca --location
y asigne el valor a su ubicación. Si vas a sobrescribir una tabla, añade la marca --replace
.
Para cargar solo campos específicos, usa la marca --projection_fields.
bq --location=LOCATION load \
--source_format=FORMAT \
DATASET.TABLE \
PATH_TO_SOURCE
Haz los cambios siguientes:
LOCATION
: tu ubicación. La marca--location
es opcional.FORMAT
:DATASTORE_BACKUP
. Datastore Backup es la opción correcta para Firestore. Firestore y Datastore comparten un formato de exportación.DATASET
: el conjunto de datos que contiene la tabla en la que vas a cargar los datos.TABLE
: la tabla en la que está cargando datos. Si la tabla no existe, se crea.PATH_TO_SOURCE
: el URI de Cloud Storage.
Por ejemplo, el siguiente comando carga el archivo de exportación de Firestore gs://mybucket/20180228T1256/default_namespace/kind_Book/default_namespace_kind_Book.export_metadata
en una tabla llamada book_data
.
mybucket
y mydataset
se crearon en la ubicación multirregional US
.
bq --location=US load \
--source_format=DATASTORE_BACKUP \
mydataset.book_data \
gs://mybucket/20180228T1256/default_namespace/kind_Book/default_namespace_kind_Book.export_metadata
API
Define las siguientes propiedades para cargar datos de exportación de Firestore mediante la API.
Crea una
load
configuración de trabajo que apunte a los datos de origen en Cloud Storage.Especifica tu ubicación en la propiedad
location
de la secciónjobReference
del recurso de empleo.El
sourceUris
debe estar completo y tener el formatogs://BUCKET/OBJECT
en la configuración de la tarea de carga. El nombre del archivo (objeto) debe terminar enKIND_NAME.export_metadata
. Solo se permite un URI para las exportaciones de Firestore y no se puede usar un comodín.Para especificar el formato de los datos, asigna el valor
DATASTORE_BACKUP
a la propiedadsourceFormat
en la configuración de la tarea de carga. Datastore Backup es la opción correcta para Firestore. Firestore y Datastore comparten un formato de exportación.Para cargar solo campos específicos, define la propiedad
projectionFields
.Si va a sobrescribir una tabla, especifique la disposición de escritura asignando el valor
WRITE_TRUNCATE
a la propiedadwriteDisposition
.
Python
Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Opciones de Firestore
Para cambiar la forma en que BigQuery analiza los datos exportados de Firestore, especifica la siguiente opción:
Opción deGoogle Cloud consola | marca `bq` | Propiedad de la API de BigQuery | Descripción |
---|---|---|---|
No disponible | --projection_fields |
projectionFields
(Java,
Python) |
(Opcional) Lista separada por comas que indica qué campos del documento se deben cargar de una exportación de Firestore. De forma predeterminada, BigQuery carga todos los campos. En los nombres de los campos se distingue entre mayúsculas y minúsculas, y deben estar presentes en la exportación. No puedes especificar rutas de campo en un campo de mapa, como map.foo .
|
Conversión de tipo de datos
BigQuery convierte los datos de cada documento de los archivos de exportación de Firestore a tipos de datos de BigQuery. En la siguiente tabla se describe la conversión entre los tipos de datos admitidos.
Tipo de datos de Firestore | Tipo de datos de BigQuery |
---|---|
Matriz | RECORD |
Booleano | BOOLEAN |
Referencia | RECORD |
Fecha y hora | TIMESTAMP |
Mapa | RECORD |
Número de punto flotante | FLOAT |
Punto geográfico |
RECORD [{"lat","FLOAT"}, {"long","FLOAT"}] |
Entero | INTEGER |
Cadena | STRING (truncado a 64 KB) |
Propiedades de clave de Firestore
Cada documento de Firestore tiene una clave única que contiene información como el ID y la ruta del documento.
BigQuery crea un tipo de datos RECORD
(también conocido como STRUCT
) para la clave, con campos anidados para cada información, tal como se describe en la siguiente tabla.
Propiedad clave | Descripción | Tipo de datos de BigQuery |
---|---|---|
__key__.app |
El nombre de la aplicación de Firestore. | STRING |
__key__.id |
El ID del documento o null si se ha definido __key__.name . |
INTEGER |
__key__.kind |
El ID de la colección del documento. | STRING |
__key__.name |
El nombre del documento o null si __key__.id
está definido. |
STRING |
__key__.namespace |
Firestore no admite espacios de nombres personalizados. El espacio de nombres predeterminado se representa mediante una cadena vacía. | STRING |
__key__.path |
La ruta del documento: la secuencia del documento y los pares de colecciones desde la colección raíz. Por ejemplo: "Country",
"USA", "PostalCode", 10011, "Route", 1234 . |
STRING |