Exportar recomendações para o BigQuery.

Visão geral

Com a exportação do BigQuery, é possível ver snapshots diários de recomendações para sua organização. Para isso, basta usar o serviço de transferência de dados do BigQuery. Consulte este documento para ver quais recomendadores estão incluídos no BigQuery Export hoje.

Antes de começar

Conclua as etapas a seguir antes de criar uma transferência de dados para recomendações:

  • Permita que o serviço de transferência de dados do BigQuery gerencie sua transferência de dados. Se você usar a IU da Web do BigQuery para criar a transferência, será necessário permitir que os pop-ups de console.cloud.google.com no seu navegador possam ver as permissões. Para mais detalhes, consulte ativar um serviço de transferência de dados do BigQuery.
  • Crie um conjunto de dados do BigQuery para armazenar os dados.
    • A transferência de dados usa a mesma região em que o conjunto de dados é criado. O local ficará imutável depois que o conjunto de dados e a transferência forem criados.
    • O conjunto de dados conterá insights e recomendações de todas as regiões do mundo. Assim, essa operação agregaria todos esses dados em uma região global durante o processo. Consulte o Google Cloud Customer Care para preocupações sobre residência de dados.
    • Se o local do conjunto de dados tiver sido lançado recentemente, pode haver um atraso na disponibilidade inicial dos dados de exportação.

Preços

A exportação de recomendações para o BigQuery está disponível para todos os clientes Recomendadores com base no nível de preços do Recomendador.

Permissões necessárias

Ao configurar a transferência de dados, você precisa das seguintes permissões no nível do projeto em que uma transferência de dados é criada:

  • bigquery.transfers.update: permite criar a transferência
  • bigquery.datasets.update: permite atualizar ações no conjunto de dados de destino
  • resourcemanager.projects.update: permite selecionar o projeto em que você quer que os dados de exportação sejam armazenados.
  • pubsub.topics.list: permite selecionar um tópico do Pub/Sub para receber notificações sobre a exportação.

A seguinte permissão é necessária no nível da organização. Ela corresponde à organização que está sendo configurada para a exportação.

  • recommender.resources.export: permite exportar recomendações para o BigQuery

As seguintes permissões são necessárias para exportar preços negociados para as recomendações de economia de custos:

  • billing.resourceCosts.get at project level: permite exportar preços negociados para as recomendações no nível do projeto.
  • billing.accounts.getSpendingInformation at billing account level: permite exportar preços negociados para as recomendações no nível da conta de faturamento

Sem essas permissões, as recomendações de economia serão exportadas com preços padrão em vez de preços negociados.

Conceder permissões

Os papéis a seguir precisam ser concedidos no projeto em que você cria a transferência de dados:

    Para criar ações de transferência e atualização no conjunto de dados de destino, você precisa conceder o seguinte papel:

  • Papel de administrador do BigQuery: roles/bigquery.admin
  • Há vários papéis que contêm permissões para selecionar um projeto para armazenar os dados de exportação e selecionar um tópico do Pub/Sub para receber notificações. Para ter essas duas permissões disponíveis, conceda o seguinte papel:

  • Papel Proprietário do projeto roles/owner
  • Há vários papéis que contêm a permissão billing.resourceCosts.get para exportar preços negociados para recomendações de economia no custo no nível do projeto. É possível conceder qualquer um deles:

  • Papel Proprietário do projeto - roles/owner
  • Papel Leitor do projeto - roles/viewer
  • Papel Editor do projeto - roles/editor
  • Há vários papéis que contêm a permissão billing.accounts.getSpendingInformation para exportar preços negociados para recomendações de economia de custos no nível da conta de faturamento. É possível conceder qualquer um deles:

  • Papel Administrador da conta de faturamento - roles/billing.admin
  • Papel Gerente de custos da conta de faturamento - roles/billing.costsManager
  • Papel Leitor da conta de faturamento - roles/billing.viewer

Você precisa conceder o seguinte papel no nível da organização:

  • Papel de Exportador de recomendações (roles/recommender.exporter) no Console do Google Cloud.

Também é possível criar papéis personalizados que contenham as permissões necessárias.

Criar uma transferência de dados para recomendações

  1. Fazer login no Console do Google Cloud.

    Fazer login no console do Google Cloud

  2. Na Página inicial, clique na guia Recomendações.

  3. Clique em Exportar para visualizar o formulário de exportação do BigQuery.

  4. Selecione um Projeto de destino para armazenar os dados de recomendação e clique em Próximo.

  5. Clique em Ativar APIs para ativar as APIs do BigQuery para exportação. Esse processo pode levar alguns segundos para ser concluído. Quando terminar, clique em Continuar.

  6. No formulário Configurar transferência, forneça os seguintes detalhes:

    • No campo Nome de exibição, na seção Transferir nome da configuração, insira um nome para a transferência. Ele pode ter qualquer valor que identifique facilmente a transferência, caso seja necessário modificá-la no futuro.

    • Na seção Opções de programação, em Programação, deixe o valor padrão (Começar agora) ou clique em Começar no horário definido.

      • Em Repetições, escolha uma opção para a frequência de execução da transferência.

        • Diário (padrão)
        • Semanais
        • Mensais
        • Personalizadas
        • Sob demanda
      • Em Data e hora de início, insira a data e a hora para iniciar a transferência. Se você escolher Iniciar agora, essa opção ficará desativada.

    • Na seção Configurações de destino, em Conjunto de dados de destino, escolha o ID do conjunto de dados criado para armazenar seus dados.

    • Na seção Detalhes da fonte de dados:

      • O valor padrão de organization_id é a organização para a qual você está visualizando as recomendações. Se você quiser exportar recomendações para outra organização, isso pode ser alterado na parte superior do console no visualizador da organização.

    • Opcional: na seção Opções de notificação:

      • Clique no botão para ativar as notificações por e-mail. Quando você ativa essa opção, o administrador de transferência recebe uma notificação por e-mail se uma execução de transferência falhar.
      • Em Selecionar um tópico do Pub/Sub, escolha o nome do tópico ou clique em Criar um tópico. Essa opção configura notificações de execução do Pub/Sub da sua transferência.

  7. Clique em Criar para criar a transferência.

  8. Clique em Permitir no pop-up de consentimento.

  9. Quando a transferência for criada, você será redirecionado de volta para o Hub de recomendações. Você pode clicar no link para acessar os detalhes da configuração de transferência. Também é possível acessar as transferências fazendo o seguinte:

    • Acesse a página do BigQuery no console do Google Cloud.

      Acessar a página do BigQuery

    • Clique em Transferências de dados. Você poderá ver todas as transferências de dados disponíveis.

Visualizar o histórico de execução de uma transferência

Para visualizar o histórico de execução de uma transferência, faça o seguinte:

  1. Acesse a página do BigQuery no console do Google Cloud.

    Acessar a página do BigQuery

  2. Clique em Transferências de dados. Você poderá ver todas as transferências de dados disponíveis.

  3. Clique na transferência apropriada na lista.

  4. Na lista de transferências de execução exibida na guia HISTÓRICO DE EXECUÇÃO, selecione a transferência cujos detalhes você quer visualizar.

  5. O painel Detalhes da execução é exibido para a transferência de execução individual que você selecionou. Alguns dos possíveis detalhes de execução exibidos são:

    • Transferência adiada devido a dados de origem indisponíveis.
    • Job que indica o número de linhas exportadas para uma tabela
    • Permissões ausentes para uma origem de dados que você precisa conceder e posteriormente programar um preenchimento.

Quando seus dados são exportados?

Quando você cria uma transferência de dados, a primeira exportação ocorre em dois dias. Após a primeira exportação, os jobs de exportação são executados na cadência que você solicitou no momento da configuração. Aplicam-se as seguintes condições:

  • O job de exportação de um dia específico (D) exporta os dados do fim do dia (D) para seu conjunto de dados do BigQuery, que geralmente termina no final do dia seguinte (D+ 1). A tarefa de exportação é executada no fuso horário PST e pode parecer ter um atraso adicional para outros fusos horários.

  • O job de exportação diário não será executado até que todos os dados para exportação estejam disponíveis. Isso pode resultar em variações e, às vezes, atrasos no dia e horário em que o conjunto de dados é atualizado. Portanto, é melhor usar o snapshot de dados mais recente disponível em vez de ter uma dependência confidencial forte/de tempo em tabelas datadas específicas.

Mensagens de status comuns em uma exportação

Saiba mais sobre mensagens de status comuns que você encontra nas recomendações de exportação para o BigQuery.

O usuário não tem a permissão necessária

A mensagem a seguir é exibida quando o usuário não tem a permissão necessária recommender.resources.export. Você verá a seguinte mensagem:

User does not have required permission "recommender.resources.export". Please, obtain the required permissions for the datasource and try again by triggering a backfill for this date

Para resolver esse problema, conceda o papel do IAM roles/recommender.exporter a user/service account configurando a exportação no nível organizacional para a organização em que a exportação foi configurada. Ele pode ser fornecido pelos comandos gcloud abaixo:

  • No caso do Usuário:

    gcloud organizations add-iam-policy-binding *<organization_id>* --member='user:*<user_name>*' --role='roles/recommender.exporter'
    
  • No caso de uma conta de serviço:

    gcloud organizations add-iam-policy-binding *<organization_id>* --member='serviceAccount:*<service_acct_name>*' --role='roles/recommender.exporter'
    

Transferência adiada porque os dados de origem não estão disponíveis

A mensagem a seguir é exibida quando a transferência é reprogramada porque os dados de origem ainda não estão disponíveis. Isso não é um erro. Isso significa que os pipelines de exportação ainda não foram concluídos. A transferência será executada novamente no novo horário programado e será bem-sucedida quando os pipelines de exportação forem concluídos. Você verá a seguinte mensagem:

Transfer deferred due to source data not being available

Dados de origem não encontrados

A mensagem a seguir aparece quando os pipelines do F1toPlacer são concluídos, mas não são encontradas recomendações ou insights para a organização para a qual a exportação foi configurada. Você verá a seguinte mensagem:

Source data not found for 'recommendations_export$<date>'insights_export$<date>

Essa mensagem aparece pelos seguintes motivos:

  • O usuário configurou a exportação há menos de dois dias. O guia do cliente informa aos clientes que há um atraso de um dia até que a exportação esteja disponível.
  • Não há recomendações ou insights disponíveis para a organização no dia específico. Esse pode ser o caso real ou os pipelines podem ter sido executados antes da disponibilização de todas as recomendações ou insights do dia.

Ver tabelas de uma transferência

Quando você exporta recomendações para o BigQuery, o conjunto de dados contém duas tabelas particionadas por data:

  • recommendations_export
  • insight_export

Para mais detalhes sobre tabelas e esquema, consulte Como criar e usar tabelas e Como especificar um esquema.

Para visualizar as tabelas de uma transferência de dados, faça o seguinte:

  1. Acesse a página do BigQuery no console do Google Cloud. Acessar a página do BigQuery

  2. Clique em Transferências de dados. Você poderá ver todas as transferências de dados disponíveis.

  3. Clique na transferência apropriada na lista.

  4. Clique em CONFIGURAÇÃO e depois no conjunto de dados.

  5. No painel Explorer, expanda o projeto e selecione um conjunto de dados. A descrição e os detalhes são exibidos no painel de detalhes. As tabelas de um conjunto de dados são listadas com o nome do conjunto de dados no painel Explorador.

Programe um preenchimento

As recomendações de uma data no passado (posterior à data em que a organização foi ativada para a exportação) podem ser exportadas programando um preenchimento. Para programar um preenchimento, faça o seguinte:

  1. Acesse a página do BigQuery no console do Google Cloud.

    Acessar a página do BigQuery

  2. Clique em Transferências de dados.

  3. Na página Transferências, clique em uma transferência apropriada na lista.

    1. Clique em Programar preenchimento.

    2. Na caixa de diálogo Programar preenchimento, escolha a Data de início e a Data de término.

Para mais informações sobre como trabalhar com transferências, consulte Como trabalhar com transferências.

Esquema de exportação

Tabela de exportação de recomendações:

schema:
   fields:
     - name: cloud_entity_type
       type: STRING
       description: |
         Represents what cloud entity type the recommendation was generated for - eg: project number, billing account
     - name: cloud_entity_id
       type: STRING
       description: |
         Value of the project number or billing account id
     - name: name
       type: STRING
       description: |
         Name of recommendation. A project recommendation is represented as
         projects/[PROJECT_NUMBER]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]/recommendations/[RECOMMENDATION_ID]
     - name: location
       type: STRING
       description: |
         Location for which this recommendation is generated
     - name: recommender
       type: STRING
       description: |
         Recommender ID of the recommender that has produced this recommendation
     - name: recommender_subtype
       type: STRING
       description: |
           Contains an identifier for a subtype of recommendations produced for the
           same recommender. Subtype is a function of content and impact, meaning a
           new subtype will be added when either content or primary impact category
           changes.
           Examples:
           For recommender = "google.iam.policy.Recommender",
           recommender_subtype can be one of "REMOVE_ROLE"/"REPLACE_ROLE"
     - name: target_resources
       type: STRING
       mode: REPEATED
       description: |
         Contains the fully qualified resource names for resources changed by the
         operations in this recommendation. This field is always populated. ex:
         [//cloudresourcemanager.googleapis.com/projects/foo].
     - name: description
       type: STRING
       description: |
         Required. Free-form human readable summary in English.
         The maximum length is 500 characters.
     - name: last_refresh_time
       type: TIMESTAMP
       description: |
         Output only. Last time this recommendation was refreshed by the system that created it in the first place.
     - name: primary_impact
       type: RECORD
       description: |
         Required. The primary impact that this recommendation can have while trying to optimize
         for one category.
       schema:
         fields:
         - name: category
           type: STRING
           description: |
             Category that is being targeted.
             Values can be the following:
               CATEGORY_UNSPECIFIED:
                 Default unspecified category. Do not use directly.
               COST:
                 Indicates a potential increase or decrease in cost.
               SECURITY:
                 Indicates a potential increase or decrease in security.
               PERFORMANCE:
                 Indicates a potential increase or decrease in performance.
               RELIABILITY:
                 Indicates a potential increase or decrease in reliability.
         - name: cost_projection
           type: RECORD
           description: Optional. Use with CategoryType.COST
           schema:
             fields:
             - name: cost
               type: RECORD
               description: |
                 An approximate projection on amount saved or amount incurred.
                 Negative cost units indicate cost savings and positive cost units indicate
                 increase. See google.type.Money documentation for positive/negative units.
               schema:
                 fields:
                 - name: currency_code
                   type: STRING
                   description: The 3-letter currency code defined in ISO 4217.
                 - name: units
                   type: INTEGER
                   description: |
                     The whole units of the amount. For example if `currencyCode` is `"USD"`,
                     then 1 unit is one US dollar.
                 - name: nanos
                   type: INTEGER
                   description: |
                     Number of nano (10^-9) units of the amount.
                     The value must be between -999,999,999 and +999,999,999 inclusive.
                     If `units` is positive, `nanos` must be positive or zero.
                     If `units` is zero, `nanos` can be positive, zero, or negative.
                     If `units` is negative, `nanos` must be negative or zero.
                     For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
             - name: cost_in_local_currency
               type: RECORD
               description: |
                 An approximate projection on amount saved or amount incurred in the local currency.
                 Negative cost units indicate cost savings and positive cost units indicate
                 increase. See google.type.Money documentation for positive/negative units.
               schema:
                 fields:
                 - name: currency_code
                   type: STRING
                   description: The 3-letter currency code defined in ISO 4217.
                 - name: units
                   type: INTEGER
                   description: |
                     The whole units of the amount. For example if `currencyCode` is `"USD"`,
                     then 1 unit is one US dollar.
                 - name: nanos
                   type: INTEGER
                   description: |
                     Number of nano (10^-9) units of the amount.
                     The value must be between -999,999,999 and +999,999,999 inclusive.
                     If `units` is positive, `nanos` must be positive or zero.
                     If `units` is zero, `nanos` can be positive, zero, or negative.
                     If `units` is negative, `nanos` must be negative or zero.
                     For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
             - name: duration
               type: RECORD
               description: Duration for which this cost applies.
               schema:
                 fields:
                 - name: seconds
                   type: INTEGER
                   description: |
                     Signed seconds of the span of time. Must be from -315,576,000,000
                     to +315,576,000,000 inclusive. Note: these bounds are computed from:
                     60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
                 - name: nanos
                   type: INTEGER
                   description: |
                     Signed fractions of a second at nanosecond resolution of the span
                     of time. Durations less than one second are represented with a 0
                     `seconds` field and a positive or negative `nanos` field. For durations
                     of one second or more, a non-zero value for the `nanos` field must be
                     of the same sign as the `seconds` field. Must be from -999,999,999
                     to +999,999,999 inclusive.
             - name: pricing_type_name
               type: STRING
               description: |
                     A pricing type can either be based on the price listed on GCP (LIST) or a custom
                     price based on past usage (CUSTOM).
         - name: reliability_projection
           type: RECORD
           description: Optional. Use with CategoryType.RELIABILITY
           schema:
             fields:
             - name: risk_types
               type: STRING
               mode: REPEATED
               description: |
                 The risk associated with the reliability issue.
                   RISK_TYPE_UNSPECIFIED:
                     Default unspecified risk. Do not use directly.
                   SERVICE_DISRUPTION:
                     Potential service downtime.
                   DATA_LOSS:
                     Potential data loss.
                   ACCESS_DENY:
                     Potential access denial. The service is still up but some or all clients
                     can not access it.
             - name: details_json
               type: STRING
               description: |
                 Additional reliability impact details that is provided by the recommender in JSON
                 format.
     - name: state
       type: STRING
       description: |
             Output only. The state of the recommendation:
               STATE_UNSPECIFIED:
                 Default state. Do not use directly.
               ACTIVE:
                 Recommendation is active and can be applied. Recommendations content can
                 be updated by Google.
                 ACTIVE recommendations can be marked as CLAIMED, SUCCEEDED, or FAILED.
               CLAIMED:
                 Recommendation is in claimed state. Recommendations content is
                 immutable and cannot be updated by Google.
                 CLAIMED recommendations can be marked as CLAIMED, SUCCEEDED, or FAILED.
               SUCCEEDED:
                 Recommendation is in succeeded state. Recommendations content is
                 immutable and cannot be updated by Google.
                 SUCCEEDED recommendations can be marked as SUCCEEDED, or FAILED.
               FAILED:
                 Recommendation is in failed state. Recommendations content is immutable
                 and cannot be updated by Google.
                 FAILED recommendations can be marked as SUCCEEDED, or FAILED.
               DISMISSED:
                 Recommendation is in dismissed state.
                 DISMISSED recommendations can be marked as ACTIVE.
     - name: ancestors
       type: RECORD
       description: |
         Ancestry for the recommendation entity
       schema:
         fields:
         - name: organization_id
           type: STRING
           description: |
             Organization to which the recommendation project
         - name: folder_ids
           type: STRING
           mode: REPEATED
           description: |
             Up to 5 levels of parent folders for the recommendation project
     - name: associated_insights
       type: STRING
       mode: REPEATED
       description: |
         Insights associated with this recommendation. A project insight is represented as
         projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]/insights/[insight_id]
     - name: recommendation_details
       type: STRING
       description: |
         Additional details about the recommendation in JSON format
     - name: priority
       type: STRING
       description: |
         Priority of the recommendation:
           PRIORITY_UNSPECIFIED:
             Default unspecified priority. Do not use directly.
           P4:
             Lowest priority.
           P3:
             Second lowest priority.
           P2:
             Second highest priority.
           P1:
             Highest priority.

Tabela de exportação de insights:

schema:
  - fields:
      - name: cloud_entity_type
        type: STRING
        description: |
          Represents what cloud entity type the recommendation was generated for - eg: project number, billing account
      - name: cloud_entity_id
        type: STRING
        description: |
          Value of the project number or billing account id
      - name: name
        type: STRING
        description: |
          Name of recommendation. A project recommendation is represented as
          projects/[PROJECT_NUMBER]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]/recommendations/[RECOMMENDATION_ID]
      - name: location
        type: STRING
        description: |
          Location for which this recommendation is generated
      - name: insight_type
        type: STRING
        description: |
          Recommender ID of the recommender that has produced this recommendation
      - name: insight_subtype
        type: STRING
        description: |
            Contains an identifier for a subtype of recommendations produced for the
            same recommender. Subtype is a function of content and impact, meaning a
            new subtype will be added when either content or primary impact category
            changes.
            Examples:
            For recommender = "google.iam.policy.Recommender",
            recommender_subtype can be one of "REMOVE_ROLE"/"REPLACE_ROLE"
      - name: target_resources
        type: STRING
        mode: REPEATED
        description: |
          Contains the fully qualified resource names for resources changed by the
          operations in this recommendation. This field is always populated. ex:
          [//cloudresourcemanager.googleapis.com/projects/foo].
      - name: description
        type: STRING
        description: |
          Required. Free-form human readable summary in English.
          The maximum length is 500 characters.
      - name: last_refresh_time
        type: TIMESTAMP
        description: |
          Output only. Last time this recommendation was refreshed by the system that created it in the first place.
      - name: category
        type: STRING
        description: |
          Category being targeted by the insight. Can be one of:
          Unspecified category.
          CATEGORY_UNSPECIFIED = Unspecified category.
          COST = The insight is related to cost.
          SECURITY = The insight is related to security.
          PERFORMANCE = The insight is related to performance.
          MANAGEABILITY = The insight is related to manageability.
          RELIABILITY = The insight is related to reliability.;
      - name: state
        type: STRING
        description: |
              Output only. The state of the recommendation:
                STATE_UNSPECIFIED:
                  Default state. Do not use directly.
                ACTIVE:
                  Recommendation is active and can be applied. Recommendations content can
                  be updated by Google.
                  ACTIVE recommendations can be marked as CLAIMED, SUCCEEDED, or FAILED.
                CLAIMED:
                  Recommendation is in claimed state. Recommendations content is
                  immutable and cannot be updated by Google.
                  CLAIMED recommendations can be marked as CLAIMED, SUCCEEDED, or FAILED.
                SUCCEEDED:
                  Recommendation is in succeeded state. Recommendations content is
                  immutable and cannot be updated by Google.
                  SUCCEEDED recommendations can be marked as SUCCEEDED, or FAILED.
                FAILED:
                  Recommendation is in failed state. Recommendations content is immutable
                  and cannot be updated by Google.
                  FAILED recommendations can be marked as SUCCEEDED, or FAILED.
                DISMISSED:
                  Recommendation is in dismissed state.
                  DISMISSED recommendations can be marked as ACTIVE.
      - name: ancestors
        type: RECORD
        description: |
          Ancestry for the recommendation entity
        schema:
          fields:
          - name: organization_id
            type: STRING
            description: |
              Organization to which the recommendation project
          - name: folder_ids
            type: STRING
            mode: REPEATED
            description: |
              Up to 5 levels of parent folders for the recommendation project
      - name: associated_recommendations
        type: STRING
        mode: REPEATED
        description: |
          Insights associated with this recommendation. A project insight is represented as
          projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]/insights/[insight_id]
      - name: insight_details
        type: STRING
        description: |
          Additional details about the insight in JSON format
          schema:
            fields:
            - name: content
              type: STRING
              description: |
                A struct of custom fields to explain the insight.
                Example: "grantedPermissionsCount": "1000"
            - name: observation_period
              type: TIMESTAMP
              description: |
                Observation period that led to the insight. The source data used to
                generate the insight ends at last_refresh_time and begins at
                (last_refresh_time - observation_period).
          - name: state_metadata
            type: STRING
            description: |
              A map of metadata for the state, provided by user or automations systems.
      - name: severity
        type: STRING
        description: |
          Severity of the insight:
            SEVERITY_UNSPECIFIED:
              Default unspecified severity. Do not use directly.
            LOW:
              Lowest severity.
            MEDIUM:
              Second lowest severity.
            HIGH:
              Second highest severity.
            CRITICAL:
              Highest severity.

Exemplo de consultas

Use as consultas de amostra a seguir para analisar os dados exportados.

Visualização da economia de custos para recomendações em que a duração da recomendação é exibida em dias

SELECT name, recommender, target_resources,
  case primary_impact.cost_projection.cost.units is null
       when true then round(primary_impact.cost_projection.cost.nanos * power(10,-9),2)
       else
       round( primary_impact.cost_projection.cost.units +
       (primary_impact.cost_projection.cost.nanos * power(10,-9)), 2)
   end
   as dollar_amt,
   primary_impact.cost_projection.duration.seconds/(60*60*24) as duration_in_days
FROM `<project>.<dataset>.recommendations_export`
WHERE DATE(_PARTITIONTIME) = "<date>"
and primary_impact.category = "COST"

Como visualizar a lista de papéis do IAM não utilizados

SELECT *
FROM `<project>.<dataset>.recommendations_export`
WHERE DATE(_PARTITIONTIME) = "<date>"
and recommender = "google.iam.policy.Recommender"
and recommender_subtype = "REMOVE_ROLE"

Como visualizar uma lista de papéis concedidos que precisam ser substituídos por papéis menores

SELECT *
FROM `<project>.<dataset>.recommendations_export`
WHERE DATE(_PARTITIONTIME) = "<date>"
and recommender = "google.iam.policy.Recommender"
and recommender_subtype = "REPLACE_ROLE"

Como visualizar insights de uma recomendação

SELECT recommendations.name as recommendation_name,
insights.name as insight_name,
recommendations.cloud_entity_id,
recommendations.cloud_entity_type,
recommendations.recommender,
recommendations.recommender_subtype,
recommendations.description,
recommendations.target_resources,
recommendations.recommendation_details,
recommendations.state,
recommendations.last_refresh_time as recommendation_last_refresh_time,
insights.insight_type,
insights.insight_subtype,
insights.category,
insights.description,
insights.insight_details,
insights.state,
insights.last_refresh_time as insight_last_refresh_time
FROM `<project>.<dataset>.recommendations_export` as recommendations,
   `<project>.<dataset>.insights_export` as insights
WHERE DATE(recommendations._PARTITIONTIME) = "<date>"
and DATE(insights._PARTITIONTIME) = "<date>"
and insights.name in unnest(recommendations.associated_insights)

Como visualizar recomendações de projetos pertencentes a uma pasta específica

Essa consulta retorna pastas pai com até cinco níveis do projeto.

SELECT *
FROM `<project>.<dataset>.recommendations_export`
WHERE DATE(_PARTITIONTIME) = "<date>"
and "<folder_id>" in unnest(ancestors.folder_ids)

Como visualizar recomendações para a data mais recente disponível até o momento

DECLARE max_date TIMESTAMP;

SET max_date = (
  SELECT MAX(_PARTITIONTIME) FROM
  `<project>.<dataset>.recommendations_export`
  );

SELECT *
FROM `<project>.<dataset>.recommendations_export`
WHERE _PARTITIONTIME = max_date

Usar o Planilhas para explorar dados do BigQuery

Como alternativa à execução de consultas no BigQuery, é possível acessar, analisar, visualizar e compartilhar bilhões de linhas de dados do BigQuery da sua planilha com as páginas conectadas, o novo conector de dados do BigQuery. Veja mais informações em Primeiros passos com os dados do BigQuery no Planilhas Google.

Configurar a exportação usando a linha de comando do BigQuery e a API REST

  • Conseguir as permissões necessárias:

    Consiga as permissões de gerenciamento de identidade e acesso necessárias no Console do Google Cloud ou na linha de comando.

    Por exemplo, para usar a linha de comando e receber a permissão recommender.resources.export no nível da organização para a conta de serviço:

    gcloud organizations add-iam-policy-binding *<organization_id>* --member=serviceAccount:*<service_acct_name>*' --role='roles/recommender.exporter'

  • Criar conjunto de dados e ativar a API BigQuery

  • Inscrever o projeto na fonte de dados do BigQuery

    Datasource to use: 6063d10f-0000-2c12-a706-f403045e6250

  • Crie a exportação:

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

    Em que:

    • project_id é o ID do projeto.
    • dataset é o código do conjunto de dados de destino para a configuração de transferência.
    • name é o nome de exibição da configuração de transferência. Esse nome pode ser qualquer valor que identifique facilmente a transferência, caso seja necessário modificá-la futuramente.
    • parameters contém os parâmetros da configuração da transferência criada no formato JSON. Para recomendações e insights no BigQuery Export, é necessário fornecer o "organization_id" para que recomendações e insights sejam exportados. Formato dos parâmetros: '{"organization_id":"<org id>"}'
    • data_source Fonte de dados a ser usada: "6063d10f-0000-2c12-a706-f403045e6250"
    • service_account_name é o nome da conta de serviço usada para autenticar sua exportação. A conta de serviço precisa ser da propriedade da mesma project_id usada para criar a transferência e ter todas as permissões necessárias listadas acima.
  • Gerencie uma exportação atual por meio da IU ou da linha de comando do BigQuery:

  • Observação: a exportação é executada como o usuário que configurou a conta, independentemente de quem atualiza a configuração de exportação no futuro. Por exemplo, se a exportação for feita usando uma conta de serviço e, posteriormente, um usuário humano atualizar a configuração de exportação usando a IU do serviço de transferência de dados do BigQuery, a exportação continuará sendo executada como a conta de serviço. A verificação de permissão de "recommender.resources.export" nesse caso é feita para a conta de serviço sempre que a exportação é executada.