Implementa un conector de bases de datos

Advertencia: Los conectores de referencia de Cloud Search se proporcionan "tal cual" como código de muestra para usar en la creación de tus propios conectores de trabajo. Este código de muestra requiere personalización y pruebas sustanciales antes de usarse en la prueba de concepto o entornos de producción. Para el uso en producción, te recomendamos que obtengas ayuda de uno de nuestros socios de Cloud Search. Si necesitas más ayuda para encontrar un servicio de Socio de búsqueda, comuníquese con su administrador de cuentas de Google.

Puedes configurar Google Cloud Search para descubrir e indexar datos de las redes bases de datos a través del conector de bases de datos de Google Cloud Search.

Consideraciones importantes

Puedes instalar y ejecutar el conector de bases de datos de Cloud Search en casi cualquier entorno en el que se puedan ejecutar las apps de Java, siempre que el conector tenga acceso a ambos Internet y la base de datos.

Requisitos del sistema

Requisitos del sistema
Sistema operativo En Windows o Linux
Base de datos SQL Cualquier base de datos SQL con un controlador compatible con JDBC 4.0 o posterior, incluidos los siguientes:
  • MS SQL Server (2008, 2012, 2014, 2016)
  • Oracle (11g, 12c)
  • Google Cloud SQL
  • MySQL
Software Controlador de JDBC para que el conector use para acceder a la base de datos (se descarga y se instala por separado)

Implementa el conector

En los siguientes pasos, se describe cómo instalar y configurar el conector para indexar las bases de datos especificadas y mostrar los resultados a los usuarios de Cloud Search.

Requisitos previos

Antes de implementar el conector de bases de datos de Cloud Search, recopila la siguiente información:

Paso 1: Descarga y compila el software del conector de bases de datos

  1. Clona el repositorio del conector desde GitHub.
    $ git clone https://github.com/google-cloudsearch/database-connector.git
    $ cd database-connector
  2. Revisa la versión deseada del conector:
    $ git checkout tags/v1-0.0.3
  3. Compila el conector.
    $ mvn package
    Para omitir las pruebas cuando compiles el conector, usa mvn package -DskipTests.
  4. Copia el archivo ZIP del conector en el directorio de instalación local y descomprímelo:
    $ cp target/google-cloudsearch-database-connector-v1-0.0.3.zip installation-dir
    $ cd installation-dir
    $ unzip google-cloudsearch-database-connector-v1-0.0.3.zip
    $ cd google-cloudsearch-database-connector-v1-0.0.3

Paso 2. Configura el conector de bases de datos

  1. Crea un archivo de texto y asígnale el nombre connector-config.properties (predeterminado) o uno similar. Google recomienda que nombras los archivos de configuración con el .properties o .config , y mantén el archivo en el mismo directorio que el conector. Si usas un nombre o una ruta de acceso diferentes, debes especificar la ruta de acceso cuando ejecutes el conector.
  2. Agrega parámetros como pares clave-valor al contenido del archivo. El archivo de configuración debe especificar los parámetros de acceso a la fuente de datos, acceso a la base de datos, una instrucción de SQL del recorrido completo de la base de datos un título de campo de contenido y definiciones de columnas. También puedes configurar otros comportamientos del conector con parámetros opcionales. Por ejemplo:
    # Required parameters for data source access
    api.sourceId=1234567890abcdef
    api.identitySourceId=0987654321lmnopq
    api.serviceAccountPrivateKeyFile=./PrivateKey.json
    #
    # Required parameters for database access
    db.url=jdbc:mysql://localhost:3306/mysql_test
    db.user=root
    db.password=passw0rd
    #
    # Required full traversal SQL statement parameter
    db.allRecordsSql=select customer_id, first_name, last_name, phone, change_timestamp from address_book
    #
    # Required parameters for column definitions and URL format
    db.allColumns=customer_id, first_name, last_name, phone, change_timestamp
    db.uniqueKeyColumns=customer_id
    url.columns=customer_id
    #
    # Required content field parameter
    contentTemplate.db.title=customer_id
    #
    # Optional parameters to set ACLs to "entire domain" access
    defaultAcl.mode=fallback
    defaultAcl.public=true
    #
    # Optional parameters for schedule traversals
    schedule.traversalIntervalSecs=36000
    schedule.performTraversalOnStart=true
    schedule.incrementalTraversalIntervalSecs=3600
    

    Para obtener descripciones detalladas de los parámetros específicos de la base de datos, consulte la Consulta la referencia de los parámetros de configuración al final de este artículo.

    Para conocer los parámetros comunes a todas las funciones de conectores, como la configuración de metadatos, los formatos de fecha y hora y las opciones de LCA, vaya a Parámetros de conectores que proporciona Google

    Si corresponde, especifica las propiedades del objeto de esquema en el SQL de recorrido parámetros de consulta. Por lo general, puedes agregar alias al SQL. declaración. Por ejemplo, si tienes una película y el esquema de fuente de datos contiene una definición de propiedad llamada “ActorName”, una instrucción de SQL podría tener la forma: SELECT …, last_name AS ActorName, … FROM … .

Paso 3: Ejecuta el conector de bases de datos

En el siguiente ejemplo, se da por sentado que los componentes obligatorios están ubicados en el directorio local en un sistema Linux.

Para ejecutar el conector desde la línea de comandos, ingresa el siguiente comando:

java \
   -cp "google-cloudsearch-database-connector-v1-0.0.3.jar:mysql-connector-java-5.1.41-bin.jar" \
   com.google.enterprise.cloudsearch.database.DatabaseFullTraversalConnector \
   [-Dconfig=mysql.config]

Aquí:

  • google-cloud-search-database-connector-v1-0.0.3.jar es el archivo .jar del conector de bases de datos
  • mysql-connector-java-5.1.41-bin.jar es el controlador de JDBC que se usa. para acceder a la base de datos
  • mysql.config es un archivo de configuración con un nombre personalizado. Para asegurarte de que el conector reconozca tu de Terraform, especifica su ruta en la línea de comandos. De lo contrario, el conector usará connector-config.properties en tu ubicación local como nombre de archivo predeterminado.

El conector informa los errores de configuración a medida que los detecta. Algunos errores se informan cuando se inicializa el conector, como cuando una columna de base de datos se define como parte del contenido del registro (en db.allColumns), pero la columna no se usa en la consulta en SQL de recorrido de la base de datos (en db.allRecordsSql). Otros errores solo se detectan e informan cuando el conector intenta acceder a la base de datos para el primer recorrido, como una sintaxis de instrucción SQL no válida.

Referencia de los parámetros de configuración

Parámetros de acceso a la fuente de datos

Configuración Parámetro
ID de la fuente de datos api.sourceId = source-ID

Obligatorio. Cloud Search el ID de origen que configuró el administrador de Google Workspace.

ID de la fuente de identidad api.identitySourceId = identity-source-ID

Se requiere para usar usuarios y grupos externos para las LCA. Cloud Search ID de la fuente de identidad que configuró el administrador de Google Workspace.

Cuenta de servicio api.serviceAccountPrivateKeyFile = path-to-private-key

Obligatorio. La ruta de acceso a Cloud Search archivo de claves de la cuenta de servicio que creó el administrador de Google Workspace.

Parámetros de acceso a la base de datos

Configuración Parámetro
URL de la base de datos db.url = database-URL

Obligatorio. El ruta de acceso completa de la base de datos a la que se accederá, como jdbc:mysql://127.0.0.1/dbname.

Nombre de usuario y contraseña de la base de datos db.user = username
db.password = password

Obligatorio. Un nombre de usuario y una contraseña válidos que el conector utiliza para acceder a la base de datos. El usuario de la base de datos debe tener acceso de lectura a los registros relevantes de la base de datos que se lee.

Controlador JDBC db.driverClass = oracle.jdbc.OracleDriver

Solo es obligatorio si el controlador JDBC 4.0 aún no está especificado en la ruta de clase.

Parámetros de consulta de SQL transversal

El conector recorre los registros de la base de datos con SQL SELECT en el archivo de configuración. Debes configurar una consulta de recorrido completa. consultas para Los recorridos incrementales son opcionales.

Un recorrido completo lee cada registro de la base de datos configurado para la indexación. Se requiere un recorrido completo para indexar registros nuevos en Cloud Search, y también para volver a indexar todos los registros existentes.

Un recorrido incremental lee y vuelve a indexar solo las bases de datos modificadas recientemente. registros y las entradas recientes a la base de datos. Los recorridos incrementales pueden ser más eficientes que recorridos completos. Para usar recorridos incrementales, tu base de datos debe contener campos de marca de tiempo para indicar los registros modificados.

El conector ejecuta estos recorridos de acuerdo con los programas que definas en parámetros de programación de recorrido.

Configuración Parámetro
Consulta de recorrido completo db.allRecordsSql = SELECT column-1[, column-2,...] FROM database-name

Obligatorio. La consulta se ejecuta para cada recorrido completo.

Cada nombre de columna que el conector usará en cualquier (contenido, ID único, LCA) en esta consulta. El conector realiza algunas verificaciones preliminares en el inicio para detectar errores y omisiones. Por este motivo, no utilices una consulta general "SELECCIONAR * DESDE…".

Paginación de recorrido completo db.allRecordsSql.pagination = {none | offset}

El valor puede ser:

  • none: no se debe usar paginación
  • offset: se debe usar la paginación por desplazamiento de fila

    Para usar la paginación por desplazamiento, la consulta en SQL debe tener un signo de interrogación de marcador de posición (?) para un desplazamiento de fila, a partir de cero. En cada recorrido completo, la consulta se ejecuta de forma repetida hasta que no se devuelvan resultados.

Consulta de recorrido incremental db.incrementalUpdateSql = SELECT column-1[, column-2,...] FROM database-name WHERE last_update_time > ?

Obligatorio si programas recorridos incrementales.

El signo "?" en la consulta es un marcador de posición obligatorio para un valor de marca de tiempo. El usa la marca de tiempo para rastrear las modificaciones entre consultas SQL de recorrido incremental.

Para hacer un seguimiento de la columna de marca de tiempo de la base de datos para la hora de la última actualización, agrega el Es el alias timestamp_column de la instrucción de SQL. De lo contrario, usa la marca de tiempo actual de el recorrido del conector.

Para el primer recorrido incremental, el conector usa la hora de inicio del conector. Después del primer recorrido incremental, Cloud Search almacena la marca de tiempo para que los reinicios del conector puedan acceder al recorrido incremental anterior y marca de tiempo.

Zona horaria de la base de datos db.timestamp.timezone = America/Los_Angeles

Especifica la zona horaria que se usará en las marcas de tiempo de la base de datos. La marca de tiempo de la base de datos que se usa para identificar nuevas adiciones de registros o de registros modificados de bases de datos. El valor predeterminado es la zona horaria local donde se ejecuta el conector.

Ejemplos de consultas en SQL transversales

  • Consulta básica de recorrido completo que lee cada registro de interés en una base de datos de empleados para la indexación:
    db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \
        FROM employee
  • Especifica la paginación por desplazamiento y divide un recorrido completo en varias consultas.

    Para SQL Server 2012 u Oracle 12c (sintaxis de SQL estándar 2008):

    db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \
        FROM employee \
        ORDER BY customer_id OFFSET ? ROWS FETCH FIRST 1000 ROWS ONLY
    db.allRecordsSql.pagination = offset
    

    o, para MySQL o Google Cloud SQL,

    db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \
        FROM employee \
        ORDER BY customer_id LIMIT 1000 OFFSET ?
    db.allRecordsSql.pagination = offset
  • Consulta de recorrido completo que aplica LCA individuales con alias:
    db.allRecordsSql = SELECT customer_id, first_name, last_name,  employee_id, interesting_field, last_update_time, \
         permitted_readers AS readers_users, \
         denied_readers AS denied_users, \
         permitted_groups AS readers_groups, \
         denied_groups AS denied_groups \
         FROM employee
  • Consulta básica de recorrido incremental:
    db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, last_update_time \
         FROM employee \
         WHERE last_update_time > ?
  • Consulta de recorrido incremental que aplica LCA individuales con alias:
    db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, last_update_time, \
         permitted_readers AS readers_users, \
         denied_readers AS denied_users, \
         permitted_groups AS readers_groups, \
         denied_groups AS denied_groups \
         FROM employee \
         WHERE last_update_time > ?
  • Consulta de recorrido incremental que usa la marca de tiempo de la base de datos en lugar de la hora actual:
    db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, \
         last_update_time AS timestamp_column \
         FROM employee \
         WHERE last_update_time > ?

Parámetros de definición de columnas

Los siguientes parámetros especifican las columnas que utilizas en las sentencias de recorrido y para identificar cada registro de forma única.

Configuración Parámetro
Todas las columnas db.allColumns = column-1, column-2, ...column-N

Obligatorio. Identifica todas las columnas que se requieren en una consulta de SQL cuando se accede a la base de datos. Se debe hacer referencia explícitamente a las columnas definidas con este parámetro en las consultas. Cada otro parámetro de definición de columna se compara con este conjunto de columnas.

Ejemplo:

db.allColumns = customer_id, first_name, last_name, phone, change_timestamp
Columnas de clave única db.uniqueKeyColumns = column-1[, column-2]

Obligatorio. Muestra una lista con una sola columna de base de datos que contiene valores únicos o mediante una combinación de columnas cuyos valores definen un ID único.

Cloud Search requiere que cada documento que se puede buscar tenga un identificador único dentro de una fuente de datos. Debes poder definir un ID único para cada registro de la base de datos a partir de valores de columna. Si ejecutas varios conectores en bases de datos separadas, pero en un conjunto de datos común, asegúrate de especificar un ID único en todos los documentos.

Ejemplos:

db.uniqueKeyColumns = customer_id
# or
db.uniqueKeyColumns = last_name, first_name
Columna de vínculo de URL url.columns = column-1[, column-2]

Obligatorio. Especifica uno o más valores válidos, definidos los nombres de las columnas utilizadas para la URL utilizada para un resultado de la búsqueda en el que se puede hacer clic. Para las bases de datos que no tienen una URL relevante asociada con cada registro de la base de datos, se puede utilizar un vínculo estático para cada registro.

Sin embargo, si los valores de las columnas definen un vínculo válido para cada registro, se deben especificar las columnas de la URL de vista y los valores de configuración de formato.

Formato de URL url.format = https://www.example.com/{0}

Define el formato de la URL de vista. Los parámetros numerados hacen referencia a las columnas especificadas en db.columns, en orden, a partir de cero.

Si no se especifica, el valor predeterminado es “{0}”.

Hay ejemplos en esta tabla.

Columnas con codificación porcentual para la URL url.columnsToEscape = column-1[, column-2]

Especifica las columnas de db.columns cuyos valores se codificarán en porcentajes antes de incluirlos en una string de URL con formato.

Ejemplos de columnas de URL

Para especificar las columnas usadas en las consultas de recorrido y el formato de la URL de vista, haz lo siguiente:

  • Para usar una URL estática que no use ningún valor de registro de la base de datos, haz lo siguiente:
    url.format = https://www.example.com
  • Para usar un solo valor de columna que sea la URL de vista, haz lo siguiente:
    url.format = {0}
    url.columns = customer_id
  • Para utilizar un solo valor de columna que se sustituya en la URL de visualización en la posición {0}:
    url.format = https://www.example.com/customer/id={0}
    url.columns = customer_id
    url.columnsToEscape = customer_id
  • Para usar varios valores de columna y crear la URL de visualización (las columnas dependen del orden), sigue estos pasos:
    url.format = {1}/customer={0}
    url.columns = customer_id, linked_url
    url.columnsToEscape = customer_id

Campos de contenido

Utiliza las opciones de contenido para definir qué valores de los registros deben formar parte del contenido de búsqueda.

Configuración Parámetro
Columna de búsqueda de la mejor calidad contentTemplate.db.title = column-name

Obligatorio. La columna de mayor calidad para la indexación de búsquedas y la priorización de resultados.

Priorización de columnas para la búsqueda contentTemplate.db.quality.high = column-1[, column-2...]
contentTemplate.db.quality.medium = column-1[, column-2...]
contentTemplate.db.quality.low = column-1[, column-2...]

Designa columnas de contenido (excepto el conjunto de columnas para contentTemplate.db.title) como campos de calidad de búsqueda alta, media o baja. El valor predeterminado de las columnas sin especificar es bajo.

Columnas de datos de contenido db.contentColumns = column-1[, column-2...]

Especifica las columnas de contenido en la base de datos. Están formateados y subidos a Cloud Search como contenido de documentos que se pueden buscar.

Si no especificas un valor, el valor predeterminado es "*", lo que indica que todas las columnas deben utilizarse para el contenido.

Columna de BLOB db.blobColumn = column-name

Especifica el nombre de un solo BLOB para usar en el contenido del documento en lugar de una combinación de columnas de contenido.

Si se especifica una columna de BLOB, se considera un error si también se definen las columnas de contenido. Sin embargo, las definiciones de columnas de datos estructurados y metadatos todavía se permiten junto con las columnas de BLOB.