Operaciones por lotes

Cloud Talent Solution admite operaciones por lotes asíncronas, lo que te permite incluir varias llamadas a la API en una sola solicitud HTTP. El tipo de respuesta devuelto es google.longrunning.operation. Para obtener el estado detallado de la operación por lotes, llama al método GetOperation con el campo name de google.longrunning.operation.

El uso de la creación de lotes reduce la latencia en el tiempo de respuesta de la API y aumenta el rendimiento. Ten en cuenta que recibir correctamente una respuesta de la API por lotes solo indica que se ha creado la solicitud por lotes. El procesamiento de datos real se realiza de forma asíncrona. Las operaciones por lotes creadas hace más de 30 días ya no se podrán acceder mediante el método GetOperation.

Cada lote tiene un límite de 200 solicitudes.

Indicador de progreso de la operación por lotes

El google.longrunning.operation creado al llamar al método de creación o actualización por lotes se encuentra en uno de los siguientes estados:

  • STATE_UNSPECIFIED (valor predeterminado)
  • INICIALIZANDO
  • PROCESSING
  • SUCCEEDED
  • ERROR

En el estado INITIALIZING, los campos success_count, failure_count y total_count se definen en 0. Si la operación está en estado PROCESSING, es posible que aumenten success_count y failure_count. En el estado SUCCEEDED, success_count + failure_count siempre es igual a total_count y success_count > 0. En el estado FAILED, success_count siempre es 0.

Crear empleos por lotes

En el siguiente código de ejemplo se muestra cómo crear trabajos por lotes:

Python

Para saber cómo instalar y usar la biblioteca de cliente de CTS, consulta Bibliotecas de cliente de CTS. Para obtener más información, consulta la documentación de referencia de la API Python de CTS.

Para autenticarte en CTS, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.


from google.cloud import talent


def batch_create_jobs(
    project_id,
    tenant_id,
    company_name_one,
    requisition_id_one,
    title_one,
    description_one,
    job_application_url_one,
    address_one,
    language_code_one,
    company_name_two,
    requisition_id_two,
    title_two,
    description_two,
    job_application_url_two,
    address_two,
    language_code_two,
):
    """
    Batch Create Jobs

    Args:
      project_id Your Google Cloud Project ID
      tenant_id Identifier of the Tenant
    """

    client = talent.JobServiceClient()

    # project_id = 'Your Google Cloud Project ID'
    # tenant_id = 'Your Tenant ID (using tenancy is optional)'
    # company_name_one = 'Company name, e.g. projects/your-project/companies/company-id'
    # requisition_id_one = 'Job requisition ID, aka Posting ID. Unique per job.'
    # title_one = 'Software Engineer'
    # description_one = 'This is a description of this <i>wonderful</i> job!'
    # job_application_url_one = 'https://www.example.org/job-posting/123'
    # address_one = '1600 Amphitheatre Parkway, Mountain View, CA 94043'
    # language_code_one = 'en-US'
    # company_name_two = 'Company name, e.g. projects/your-project/companies/company-id'
    # requisition_id_two = 'Job requisition ID, aka Posting ID. Unique per job.'
    # title_two = 'Quality Assurance'
    # description_two = 'This is a description of this <i>wonderful</i> job!'
    # job_application_url_two = 'https://www.example.org/job-posting/123'
    # address_two = '111 8th Avenue, New York, NY 10011'
    # language_code_two = 'en-US'

    if isinstance(project_id, bytes):
        project_id = project_id.decode("utf-8")
    if isinstance(tenant_id, bytes):
        tenant_id = tenant_id.decode("utf-8")
    if isinstance(company_name_one, bytes):
        company_name_one = company_name_one.decode("utf-8")
    if isinstance(requisition_id_one, bytes):
        requisition_id_one = requisition_id_one.decode("utf-8")
    if isinstance(title_one, bytes):
        title_one = title_one.decode("utf-8")
    if isinstance(description_one, bytes):
        description_one = description_one.decode("utf-8")
    if isinstance(job_application_url_one, bytes):
        job_application_url_one = job_application_url_one.decode("utf-8")
    if isinstance(address_one, bytes):
        address_one = address_one.decode("utf-8")
    if isinstance(language_code_one, bytes):
        language_code_one = language_code_one.decode("utf-8")
    if isinstance(company_name_two, bytes):
        company_name_two = company_name_two.decode("utf-8")
    if isinstance(requisition_id_two, bytes):
        requisition_id_two = requisition_id_two.decode("utf-8")
    if isinstance(title_two, bytes):
        title_two = title_two.decode("utf-8")
    if isinstance(description_two, bytes):
        description_two = description_two.decode("utf-8")
    if isinstance(job_application_url_two, bytes):
        job_application_url_two = job_application_url_two.decode("utf-8")
    if isinstance(address_two, bytes):
        address_two = address_two.decode("utf-8")
    if isinstance(language_code_two, bytes):
        language_code_two = language_code_two.decode("utf-8")
    parent = f"projects/{project_id}/tenants/{tenant_id}"
    uris = [job_application_url_one]
    application_info = {"uris": uris}
    addresses = [address_one]
    jobs_element = {
        "company": company_name_one,
        "requisition_id": requisition_id_one,
        "title": title_one,
        "description": description_one,
        "application_info": application_info,
        "addresses": addresses,
        "language_code": language_code_one,
    }
    uris_2 = [job_application_url_two]
    application_info_2 = {"uris": uris_2}
    addresses_2 = [address_two]
    jobs_element_2 = {
        "company": company_name_two,
        "requisition_id": requisition_id_two,
        "title": title_two,
        "description": description_two,
        "application_info": application_info_2,
        "addresses": addresses_2,
        "language_code": language_code_two,
    }
    jobs = [jobs_element, jobs_element_2]

    operation = client.batch_create_jobs(parent=parent, jobs=jobs)

    print("Waiting for operation to complete...")
    response = operation.result(90)

    print(f"Batch response: {response}")

Actualizar empleos por lotes

En el siguiente código de ejemplo se muestra cómo actualizar trabajos por lotes:

Python

Para saber cómo instalar y usar la biblioteca de cliente de CTS, consulta Bibliotecas de cliente de CTS. Para obtener más información, consulta la documentación de referencia de la API Python de CTS.

Para autenticarte en CTS, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.


from google.cloud import talent


def batch_update_jobs(
    project_id,
    tenant_id,
    job_name_one,
    company_name_one,
    requisition_id_one,
    title_one,
    description_one,
    job_application_url_one,
    address_one,
    language_code_one,
    job_name_two,
    company_name_two,
    requisition_id_two,
    title_two,
    description_two,
    job_application_url_two,
    address_two,
    language_code_two,
):
    """
    Batch Update Jobs

    Args:
      project_id Your Google Cloud Project ID
      tenant_id Identifier of the Tenant
    """

    client = talent.JobServiceClient()

    # project_id = 'Your Google Cloud Project ID'
    # tenant_id = 'Your Tenant ID (using tenancy is optional)'
    # job_name_one = 'job name, projects/your-project/tenants/tenant-id/jobs/job-id'
    # company_name_one = 'Company name, e.g. projects/your-project/companies/company-id'
    # requisition_id_one = 'Job requisition ID, aka Posting ID. Unique per job.'
    # title_one = 'Software Engineer'
    # description_one = 'This is a description of this <i>wonderful</i> job!'
    # job_application_url_one = 'https://www.example.org/job-posting/123'
    # address_one = '1600 Amphitheatre Parkway, Mountain View, CA 94043'
    # language_code_one = 'en-US'
    # job_name_two = 'job name, projects/your-project/tenants/tenant-id/jobs/job-id'
    # company_name_two = 'Company name, e.g. projects/your-project/companies/company-id'
    # requisition_id_two = 'Job requisition ID, aka Posting ID. Unique per job.'
    # title_two = 'Quality Assurance'
    # description_two = 'This is a description of this <i>wonderful</i> job!'
    # job_application_url_two = 'https://www.example.org/job-posting/123'
    # address_two = '111 8th Avenue, New York, NY 10011'
    # language_code_two = 'en-US'

    if isinstance(project_id, bytes):
        project_id = project_id.decode("utf-8")
    if isinstance(tenant_id, bytes):
        tenant_id = tenant_id.decode("utf-8")
    if isinstance(job_name_one, bytes):
        job_name_one = job_name_one.decode("utf-8")
    if isinstance(company_name_one, bytes):
        company_name_one = company_name_one.decode("utf-8")
    if isinstance(requisition_id_one, bytes):
        requisition_id_one = requisition_id_one.decode("utf-8")
    if isinstance(title_one, bytes):
        title_one = title_one.decode("utf-8")
    if isinstance(description_one, bytes):
        description_one = description_one.decode("utf-8")
    if isinstance(job_application_url_one, bytes):
        job_application_url_one = job_application_url_one.decode("utf-8")
    if isinstance(address_one, bytes):
        address_one = address_one.decode("utf-8")
    if isinstance(language_code_one, bytes):
        language_code_one = language_code_one.decode("utf-8")
    if isinstance(job_name_two, bytes):
        job_name_two = job_name_two.decode("utf-8")
    if isinstance(company_name_two, bytes):
        company_name_two = company_name_two.decode("utf-8")
    if isinstance(requisition_id_two, bytes):
        requisition_id_two = requisition_id_two.decode("utf-8")
    if isinstance(title_two, bytes):
        title_two = title_two.decode("utf-8")
    if isinstance(description_two, bytes):
        description_two = description_two.decode("utf-8")
    if isinstance(job_application_url_two, bytes):
        job_application_url_two = job_application_url_two.decode("utf-8")
    if isinstance(address_two, bytes):
        address_two = address_two.decode("utf-8")
    if isinstance(language_code_two, bytes):
        language_code_two = language_code_two.decode("utf-8")
    parent = f"projects/{project_id}/tenants/{tenant_id}"
    uris = [job_application_url_one]
    application_info = {"uris": uris}
    addresses = [address_one]
    jobs_element = talent.Job(
        name=job_name_one,
        company=company_name_one,
        requisition_id=requisition_id_one,
        title=title_one,
        description=description_one,
        application_info=application_info,
        addresses=addresses,
        language_code=language_code_one,
    )

    uris_2 = [job_application_url_two]
    application_info_2 = {"uris": uris_2}
    addresses_2 = [address_two]
    jobs_element_2 = talent.Job(
        name=job_name_two,
        company=company_name_two,
        requisition_id=requisition_id_two,
        title=title_two,
        description=description_two,
        application_info=application_info_2,
        addresses=addresses_2,
        language_code=language_code_two,
    )

    jobs = [jobs_element, jobs_element_2]

    operation = client.batch_update_jobs(parent=parent, jobs=jobs)

    print("Waiting for operation to complete...")
    response = operation.result(90)

    print(f"Batch response: {response}")

Eliminar empleos por lotes

En el siguiente código de ejemplo se muestra cómo eliminar trabajos por lotes:

Node.js

Para saber cómo instalar y usar la biblioteca de cliente de CTS, consulta Bibliotecas de cliente de CTS. Para obtener más información, consulta la documentación de referencia de la API Node.js de CTS.

Para autenticarte en CTS, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.


const talent = require('@google-cloud/talent').v4;

/**
 * Batch delete jobs using a filter
 *
 * @param projectId {string} Your Google Cloud Project ID
 * @param tenantId {string} Identifier of the Tenantd
 * @param filter {string} The filter string specifies the jobs to be deleted.
 * For example:
 * companyName = "projects/api-test-project/companies/123" AND equisitionId = "req-1"
 */
function sampleBatchDeleteJobs(projectId, tenantId, filter) {
  const client = new talent.JobServiceClient();
  // const projectId = 'Your Google Cloud Project ID';
  // const tenantId = 'Your Tenant ID (using tenancy is optional)';
  // const filter = '[Query]';
  const formattedParent = client.tenantPath(projectId, tenantId);
  const request = {
    parent: formattedParent,
    filter: filter,
  };
  client.batchDeleteJobs(request).catch(err => {
    console.error(err);
  });
  console.log('Batch deleted jobs from filter');
}