Cargar datos de Google Play en BigQuery

Puede cargar datos de Google Play en BigQuery mediante el conector de BigQuery Data Transfer Service para Google Play. Con BigQuery Data Transfer Service, puede programar tareas de transferencia periódicas que añadan sus datos más recientes de Google Play a BigQuery.

Descripción general de los conectores

BigQuery Data Transfer Service para el conector de Google Play admite las siguientes opciones para la transferencia de datos.

Opciones de transferencia de datos Asistencia
Informes admitidos

Para obtener información sobre cómo se transforman los informes de Google Play en tablas y vistas de BigQuery, consulta el artículo Transformación de informes de Google Play.

Frecuencia de repetición El conector de Google Play admite transferencias de datos diarias.

De forma predeterminada, las transferencias de datos se programan en el momento en que se crean. Puedes configurar la hora de la transferencia de datos cuando configures la transferencia de datos.
Ventana de actualización El conector de Google Play obtiene datos de Google Play de hasta 7 días en el momento en que se ejecuta la transferencia de datos.

Para obtener más información, consulta Actualizar ventanas.
Disponibilidad de los datos de reposición Ejecuta un rellenado automático de datos para recuperar datos que no estén incluidos en la transferencia de datos programada. Puedes recuperar datos de hace tanto tiempo como permita la política de conservación de datos de tu fuente de datos.

Ingestión de datos de transferencias de Google Play

Cuando transfiere datos de Google Play a BigQuery, los datos se cargan en tablas de BigQuery con particiones por fecha. La partición de la tabla en la que se cargan los datos corresponde a la fecha de la fuente de datos. Si programa varias transferencias para la misma fecha, BigQuery Data Transfer Service sobrescribirá la partición de esa fecha con los datos más recientes. Si se realizan varias transferencias el mismo día o se ejecutan rellenados, no se duplicarán los datos y no se verán afectadas las particiones de otras fechas.

Actualizar ventanas

Una ventana de actualización es el número de días durante los que una transferencia de datos recupera datos cuando se produce una transferencia de datos. Por ejemplo, si la ventana de actualización es de tres días y se produce una transferencia diaria, BigQuery Data Transfer Service recupera todos los datos de la tabla de origen de los últimos tres días. En este ejemplo, cuando se produce una transferencia diaria, BigQuery Data Transfer Service crea una partición de tabla de destino de BigQuery con una copia de los datos de la tabla de origen del día actual y, a continuación, activa automáticamente ejecuciones de relleno para actualizar las particiones de tabla de destino de BigQuery con los datos de la tabla de origen de los dos días anteriores. Las ejecuciones de relleno automático sobrescribirán o actualizarán de forma incremental tu tabla de destino de BigQuery, en función de si el conector de BigQuery Data Transfer Service admite o no las actualizaciones incrementales.

Cuando ejecutas una transferencia de datos por primera vez, esta recupera todos los datos de origen disponibles en la ventana de actualización. Por ejemplo, si la ventana de actualización es de tres días y ejecutas la transferencia de datos por primera vez, BigQuery Data Transfer Service recuperará todos los datos de origen en un plazo de tres días.

Los periodos de actualización se asignan al campo de la API TransferConfig.data_refresh_window_days.

Para recuperar datos que no estén dentro del periodo de actualización (por ejemplo, datos históricos) o para recuperar datos de interrupciones o brechas en la transferencia, puedes iniciar o programar una reposición.

Limitaciones

  • La frecuencia mínima con la que puedes programar una transferencia de datos es de una vez cada 24 horas. De forma predeterminada, una transferencia comienza en el momento en que la creas. Sin embargo, puedes configurar la hora de inicio de la transferencia cuando configures la transferencia.
  • BigQuery Data Transfer Service no admite transferencias de datos incrementales durante una transferencia de Google Play. Cuando especifica una fecha para una transferencia de datos, se transfieren todos los datos disponibles de esa fecha.

Antes de empezar

Antes de crear una transferencia de datos de Google Play, debes hacer lo siguiente:

  • Comprueba que has completado todas las acciones necesarias para habilitar BigQuery Data Transfer Service.
  • Crea un conjunto de datos de BigQuery para almacenar los datos de Google Play.
  • Busca tu segmento de Cloud Storage:
    1. En Google Play Console, haz clic en Descargar informes y selecciona Reseñas, Estadísticas o Financieros.
    2. Para copiar el ID de tu segmento de Cloud Storage, haz clic en Copiar URI de Cloud Storage. El ID de tu segmento empieza por gs://. Por ejemplo, en el informe de reseñas, su ID es similar al siguiente:
      gs://pubsite_prod_rev_01234567890987654321/reviews
    3. Para transferir los datos de Google Play, solo tienes que copiar el ID único que se encuentra entre gs:// y /reviews:
      pubsite_prod_rev_01234567890987654321
  • Si quieres configurar notificaciones de ejecuciones de transferencias para Pub/Sub, debes tener permisos de pubsub.topics.setIamPolicy. No se necesitan permisos de Pub/Sub si solo configura notificaciones por correo electrónico. Para obtener más información, consulta el artículo sobre las notificaciones de ejecución de BigQuery Data Transfer Service.

Permisos obligatorios

  • BigQuery asegúrate de que la persona que crea la transferencia de datos tenga los siguientes permisos en BigQuery:

    • Permisos de bigquery.transfers.update para crear la transferencia de datos
    • Permisos bigquery.datasets.get y bigquery.datasets.update en el conjunto de datos de destino

    El rol predefinido de gestión de identidades y accesos bigquery.admin incluye los permisos bigquery.transfers.update, bigquery.datasets.update y bigquery.datasets.get. Para obtener más información sobre los roles de gestión de identidades y accesos en BigQuery Data Transfer Service, consulta Control de acceso.

  • Google Play: asegúrate de tener los siguientes permisos en Google Play:

    El equipo de Google Cloud NO puede generar ni conceder acceso a archivos de Google Play en tu nombre. Consulta cómo ponerte en contacto con el equipo de Asistencia de Google Play para obtener ayuda con el acceso a los archivos de Google Play.

Configurar una transferencia de Google Play

Para configurar una transferencia de datos de Google Play, necesitas lo siguiente:

  • Segmento de Cloud Storage. Los pasos para localizar tu segmento de Cloud Storage se describen en la sección Antes de empezar. Tu segmento de Cloud Storage empieza por pubsite_prod_rev. Por ejemplo: pubsite_prod_rev_01234567890987654321.
  • Sufijo de tabla: nombre descriptivo de todas las fuentes de datos que se cargan en el mismo conjunto de datos. El sufijo se usa para evitar que las transferencias independientes escriban en las mismas tablas. El sufijo de la tabla debe ser único en todas las transferencias que carguen datos en el mismo conjunto de datos, y debe ser corto para minimizar la longitud del nombre de la tabla resultante.

Para configurar una transferencia de datos de Google Play, sigue estos pasos:

Consola

  1. Ve a la página Transferencias de datos de la Google Cloud consola.

    Ir a Transferencias de datos

  2. Haz clic en Crear transferencia.

  3. En la página Crear transferencia, haz lo siguiente:

    • En la sección Tipo de fuente, en Fuente, elige Google Play.

      Fuente de transferencia

    • En la sección Nombre de la configuración de transferencia, en Nombre visible, indica un nombre para la transferencia de datos; por ejemplo, My Transfer. El nombre de la transferencia puede ser cualquier valor que te permita identificarla si necesitas modificarla más adelante.

      Nombre de transferencia

    • En la sección Opciones de programación:

      • En Frecuencia de repetición, elige una opción para determinar la frecuencia con la que se realizará la transferencia de datos. Si seleccionas Días, indica una hora válida en UTC.
      • Si procede, selecciona Empezar ahora o Empezar a una hora determinada y proporciona una fecha de inicio y un tiempo de ejecución.
    • En la sección Configuración de destino, en Conjunto de datos de destino, elija el conjunto de datos que haya creado para almacenar sus datos.

      Transferir conjunto de datos

    • En la sección Detalles de la fuente de datos:

      • En Segmento de Cloud Storage, introduce el ID de tu segmento de Cloud Storage.
      • En Sufijo de tabla, introduce un sufijo, como MT (para My Transfer).

      Detalles de la fuente de Google Play

    • En el menú Cuenta de servicio, selecciona una cuenta de servicio de las cuentas de servicio asociadas a tu proyecto Google Cloud . Puede asociar una cuenta de servicio a su transferencia de datos en lugar de usar sus credenciales de usuario. Para obtener más información sobre cómo usar cuentas de servicio con transferencias de datos, consulta el artículo Usar cuentas de servicio.

      • Si has iniciado sesión con una identidad federada, necesitas una cuenta de servicio para crear una transferencia de datos. Si has iniciado sesión con una cuenta de Google, no es obligatorio tener una cuenta de servicio para la transferencia.
      • La cuenta de servicio debe tener los permisos necesarios.
    • (Opcional) En la sección Opciones de notificación:

      • Haz clic en el interruptor para habilitar las notificaciones por correo electrónico. Si habilitas esta opción, el administrador de las transferencias recibirá una notificación por correo cuando falle una ejecución de transferencia.
      • En Selecciona un tema de Pub/Sub, elige el nombre del tema o haz clic en Crear un tema. Esta opción configura las notificaciones de Pub/Sub sobre la transferencia.
  4. Haz clic en Guardar.

bq

Introduce el comando bq mk y proporciona la marca de creación de transferencia — --transfer_config. También se necesitan las siguientes marcas:

  • --target_dataset
  • --display_name
  • --params
  • --data_source
bq mk \
--transfer_config \
--project_id=project_id \
--target_dataset=dataset \
--display_name=name \
--params='parameters' \
--data_source=data_source
--service_account_name=service_account_name

Donde:

  • project_id es el ID del proyecto. Si no se especifica --project_id, se usa el proyecto predeterminado.
  • dataset es el conjunto de datos de destino de la configuración de transferencia.
  • name es el nombre visible de la configuración de transferencia. El nombre de la transferencia de datos puede ser cualquier valor que te permita identificar la transferencia si necesitas modificarla más adelante.
  • parameters contiene los parámetros de la configuración de transferencia creada en formato JSON. Por ejemplo: --params='{"param":"param_value"}'. En el caso de Google Play, debe proporcionar los parámetros bucket y table_suffix. bucket es el bucket de Cloud Storage que contiene tus archivos de informes de Google Play.
  • data_source es la fuente de datos: play.
  • service_account_name es el nombre de la cuenta de servicio que se usa para autenticar la transferencia de datos. La cuenta de servicio debe ser propiedad del mismo project_id que se usó para crear la transferencia y debe tener todos los permisos necesarios.

Por ejemplo, el siguiente comando crea una transferencia de datos de Google Play llamada My Transfer con el segmento de Cloud Storage pubsite_prod_rev_01234567890987654321 y el conjunto de datos de destino mydataset. La transferencia de datos se crea en el proyecto predeterminado:

bq mk \
--transfer_config \
--target_dataset=mydataset \
--display_name='My Transfer' \
--params='{"bucket":"pubsite_prod_rev_01234567890987654321","table_suffix":"MT"}' \
--data_source=play

La primera vez que ejecutes el comando, recibirás un mensaje como el siguiente:

[URL omitted] Please copy and paste the above URL into your web browser and follow the instructions to retrieve an authentication code.

Sigue las instrucciones del mensaje y pega el código de autenticación en la línea de comandos.

API

Usa el método projects.locations.transferConfigs.create y proporciona una instancia del recurso TransferConfig.

Java

Antes de probar este ejemplo, sigue las Javainstrucciones 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 Java 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.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to create a play transfer config.
public class CreatePlayTransfer {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    String datasetId = "MY_DATASET_ID";
    String bucket = "gs://cloud-sample-data";
    String tableSuffix = "_test";
    Map<String, Value> params = new HashMap<>();
    params.put("bucket", Value.newBuilder().setStringValue(bucket).build());
    params.put("table_suffix", Value.newBuilder().setStringValue(tableSuffix).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDisplayName("Your Play Config Name")
            .setDataSourceId("play")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .build();
    createPlayTransfer(projectId, transferConfig);
  }

  public static void createPlayTransfer(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient client = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = client.createTransferConfig(request);
      System.out.println("play transfer created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("play transfer was not created." + ex.toString());
    }
  }
}

Solucionar problemas de configuración de transferencias de Google Play

Si tienes problemas para configurar la transferencia de datos, consulta el artículo Solucionar problemas con la configuración de transferencias de BigQuery Data Transfer Service.

Consultar tus datos

Cuando tus datos se transfieren a BigQuery, se escriben en tablas con particiones por hora de ingestión. Para obtener más información, consulta el artículo Introducción a las tablas particionadas.

Si consultas tus tablas directamente en lugar de usar las vistas generadas automáticamente, debes usar la pseudocolumna _PARTITIONTIME en tu consulta. Para obtener más información, consulta Consultar tablas con particiones.

Precios

Para obtener información sobre los precios de la transferencia de datos de Google Play, consulta la página Precios.

Cuando se transfieren los datos a BigQuery, se aplica el precio estándar de este servicio para las consultas y el almacenamiento.

Siguientes pasos