O Trino (anteriormente Presto) é um motor de consultas SQL distribuído concebido para consultar grandes conjuntos de dados distribuídos por uma ou mais origens de dados heterogéneas. O Trino pode consultar o Hive, o MySQL, o Kafka e outras origens de dados através de conetores. Este tutorial mostra como:
- Instale o serviço Trino num cluster do Dataproc
 - Consultar dados públicos a partir de um cliente Trino instalado na sua máquina local que comunica com um serviço Trino no seu cluster
 - Execute consultas a partir de uma aplicação Java que comunica com o serviço Trino no seu cluster através do controlador JDBC Java do Trino.
 
Objetivos
- Extraia os dados do BigQuery
 - Carregue os dados no Cloud Storage como ficheiros CSV
 - Transformar dados:
- Exponha os dados como uma tabela externa do Hive para que os dados possam ser consultados pelo Trino
 - Converta os dados do formato CSV para o formato Parquet para tornar as consultas mais rápidas
 
 
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
 
 
 
  Para gerar uma estimativa de custos com base na sua utilização projetada,
      use a calculadora de preços.
  
Antes de começar
Se ainda não o fez, crie um Google Cloud projeto e um contentor do Cloud Storage para armazenar os dados usados neste tutorial. 1. Configurar o seu projeto- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
 - 
    
    
      
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
 - 
      Create a project: To create a project, you need the Project Creator
      (
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles. 
 - 
  
    
Verify that billing is enabled for your Google Cloud project.
 - 
  
  
    
      
Enable the Dataproc, Compute Engine, Cloud Storage, and BigQuery APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - 
      
Install the Google Cloud CLI.
 - 
          
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
 - 
        
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init - 
    
    
      
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
 - 
      Create a project: To create a project, you need the Project Creator
      (
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles. 
 - 
  
    
Verify that billing is enabled for your Google Cloud project.
 - 
  
  
    
      
Enable the Dataproc, Compute Engine, Cloud Storage, and BigQuery APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - 
      
Install the Google Cloud CLI.
 - 
          
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
 - 
        
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init - In the Google Cloud console, go to the Cloud Storage Buckets page.
 - Click Create.
 - On the Create a bucket page, enter your bucket information. To go to the next
  step, click Continue.
   
- 
       
         In the Get started section, do the following:
          
- Enter a globally unique name that meets the bucket naming requirements.
 - To add a
            bucket label,
            expand the Labels section (),
            click add_box
            Add label, and specify a 
keyand avaluefor your label. 
 - 
       
       In the Choose where to store your data section, do the following:
        
- Select a Location type.
 - Choose a location where your bucket's data is permanently stored from the Location type drop-down menu.
            
- If you select the dual-region location type, you can also choose to enable turbo replication by using the relevant checkbox.
 
 - To set up cross-bucket replication, select
              Add cross-bucket replication via Storage Transfer Service and
              follow these steps:
               
Set up cross-bucket replication
- In the Bucket menu, select a bucket.
 In the Replication settings section, click Configure to configure settings for the replication job.
The Configure cross-bucket replication pane appears.
- To filter objects to replicate by object name prefix, enter a prefix that you want to include or exclude objects from, then click Add a prefix.
 - To set a storage class for the replicated objects, select a storage class from the Storage class menu. If you skip this step, the replicated objects will use the destination bucket's storage class by default.
 - Click Done.
 
 
 - 
       
       In the Choose how to store your data section, do the following:
          
- Select a default storage class for the bucket or Autoclass for automatic storage class management of your bucket's data.
 - To enable hierarchical namespace, in the Optimize storage for data-intensive workloads section, select Enable hierarchical namespace on this bucket.
 
 - In the Choose how to control access to objects section, select whether or not your bucket enforces public access prevention, and select an access control method for your bucket's objects.
 - 
      In the Choose how to protect object data section, do the
      following:
       
- Select any of the options under Data protection that you
        want to set for your bucket.
          
- To enable soft delete, click the Soft delete policy (For data recovery) checkbox, and specify the number of days you want to retain objects after deletion.
 - To set Object Versioning, click the Object versioning (For version control) checkbox, and specify the maximum number of versions per object and the number of days after which the noncurrent versions expire.
 - To enable the retention policy on objects and buckets, click the Retention (For compliance) checkbox, and then do the following:
            
- To enable Object Retention Lock, click the Enable object retention checkbox.
 - To enable Bucket Lock, click the Set bucket retention policy checkbox, and choose a unit of time and a length of time for your retention period.
 
 
 - To choose how your object data will be encrypted, expand the Data encryption section (), and select a Data encryption method.
 
 - Select any of the options under Data protection that you
        want to set for your bucket.
          
 
 - 
       
         In the Get started section, do the following:
          
 - Click Create.
 - Defina variáveis de ambiente:
    
- PROJETO: o seu ID do projeto
 - BUCKET_NAME: o nome do contentor do Cloud Storage que criou em Antes de começar
 - REGION: region onde o cluster usado neste tutorial vai ser criado, por exemplo, "us-west1"
 - TRABALHADORES: são recomendados 3 a 5 trabalhadores para este tutorial
 
export PROJECT=project-id export WORKERS=number export REGION=region export BUCKET_NAME=bucket-name
 - Execute a CLI Google Cloud na sua máquina local para
       criar o cluster.
 , um cluster com vários nós principais, não é recomendado, uma vez que o coordenador é iniciado no nó principal 0 e todos os outros nós principais permanecem inativos.gcloud beta dataproc clusters create trino-cluster \ --project=${PROJECT} \ --region=${REGION} \ --num-workers=${WORKERS} \ --scopes=cloud-platform \ --optional-components=TRINO \ --image-version=2.1 \ --enable-component-gateway - Na sua máquina local, execute o seguinte comando para importar os dados de táxi do BigQuery como ficheiros CSV sem cabeçalhos para o contentor do Cloud Storage que criou em Antes de começar.
bq --location=us extract --destination_format=CSV \ --field_delimiter=',' --print_header=false \ "bigquery-public-data:chicago_taxi_trips.taxi_trips" \ gs://${BUCKET_NAME}/chicago_taxi_trips/csv/shard-*.csv - Crie tabelas externas do Hive com base nos ficheiros CSV e Parquet no seu contentor do Cloud Storage.
  
- Crie a tabela externa do Hive 
chicago_taxi_trips_csv.gcloud dataproc jobs submit hive \ --cluster trino-cluster \ --region=${REGION} \ --execute " CREATE EXTERNAL TABLE chicago_taxi_trips_csv( unique_key STRING, taxi_id STRING, trip_start_timestamp TIMESTAMP, trip_end_timestamp TIMESTAMP, trip_seconds INT, trip_miles FLOAT, pickup_census_tract INT, dropoff_census_tract INT, pickup_community_area INT, dropoff_community_area INT, fare FLOAT, tips FLOAT, tolls FLOAT, extras FLOAT, trip_total FLOAT, payment_type STRING, company STRING, pickup_latitude FLOAT, pickup_longitude FLOAT, pickup_location STRING, dropoff_latitude FLOAT, dropoff_longitude FLOAT, dropoff_location STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE location 'gs://${BUCKET_NAME}/chicago_taxi_trips/csv/';" - Verifique a criação
        da tabela externa do Hive.
        
gcloud dataproc jobs submit hive \ --cluster trino-cluster \ --region=${REGION} \ --execute "SELECT COUNT(*) FROM chicago_taxi_trips_csv;" - Crie outra tabela externa do Hive 
chicago_taxi_trips_parquetcom as mesmas colunas, mas com dados armazenados no formato Parquet para um melhor desempenho das consultas.gcloud dataproc jobs submit hive \ --cluster trino-cluster \ --region=${REGION} \ --execute " CREATE EXTERNAL TABLE chicago_taxi_trips_parquet( unique_key STRING, taxi_id STRING, trip_start_timestamp TIMESTAMP, trip_end_timestamp TIMESTAMP, trip_seconds INT, trip_miles FLOAT, pickup_census_tract INT, dropoff_census_tract INT, pickup_community_area INT, dropoff_community_area INT, fare FLOAT, tips FLOAT, tolls FLOAT, extras FLOAT, trip_total FLOAT, payment_type STRING, company STRING, pickup_latitude FLOAT, pickup_longitude FLOAT, pickup_location STRING, dropoff_latitude FLOAT, dropoff_longitude FLOAT, dropoff_location STRING) STORED AS PARQUET location 'gs://${BUCKET_NAME}/chicago_taxi_trips/parquet/';" - Carregue os dados da tabela CSV do Hive para a tabela Parquet do Hive.
gcloud dataproc jobs submit hive \ --cluster trino-cluster \ --region=${REGION} \ --execute " INSERT OVERWRITE TABLE chicago_taxi_trips_parquet SELECT * FROM chicago_taxi_trips_csv;" -  Verifique se os dados foram carregados corretamente.
gcloud dataproc jobs submit hive \ --cluster trino-cluster \ --region=${REGION} \ --execute "SELECT COUNT(*) FROM chicago_taxi_trips_parquet;" 
 - Crie a tabela externa do Hive 
 - Execute o seguinte comando na sua máquina local para estabelecer uma ligação SSH ao nó principal do cluster. O terminal local deixa de responder durante a execução do comando.
gcloud compute ssh trino-cluster-m
 - Na janela do terminal SSH no nó principal do cluster, execute a CLI do Trino, que se liga ao servidor Trino em execução no nó principal.
trino --catalog hive --schema default
 - No comando 
trino:default, verifique se o Trino consegue encontrar as tabelas do Hive.show tables;
Table ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ chicago_taxi_trips_csv chicago_taxi_trips_parquet (2 rows)
 - Execute consultas a partir do comando 
trino:defaulte compare o desempenho da consulta de dados Parquet com dados CSV.- Consulta de dados Parquet
select count(*) from chicago_taxi_trips_parquet where trip_miles > 50;
_col0 ‐‐‐‐‐‐‐‐ 117957 (1 row)
Query 20180928_171735_00006_2sz8c, FINISHED, 3 nodes Splits: 308 total, 308 done (100.00%) 0:16 [113M rows, 297MB] [6.91M rows/s, 18.2MB/s] -  Consulta de dados CSV
select count(*) from chicago_taxi_trips_csv where trip_miles > 50;
_col0 ‐‐‐‐‐‐‐‐ 117957 (1 row)
Query 20180928_171936_00009_2sz8c, FINISHED, 3 nodes Splits: 881 total, 881 done (100.00%) 0:47 [113M rows, 41.5GB] [2.42M rows/s, 911MB/s] 
 - Consulta de dados Parquet
 - In the Google Cloud console, go to the Manage resources page.
 - In the project list, select the project that you want to delete, and then click Delete.
 - In the dialog, type the project ID, and then click Shut down to delete the project.
 - Para eliminar o cluster:
gcloud dataproc clusters delete --project=${PROJECT} trino-cluster \ --region=${REGION} - Para eliminar o contentor do Cloud Storage que criou em
Antes de começar, incluindo os ficheiros de dados
armazenados no contentor:
gcloud storage rm gs://${BUCKET_NAME} --recursive 
Crie um cluster do Dataproc
Crie um cluster do Dataproc com a flag optional-components (disponível na versão 2.1 e posterior da imagem) para instalar o componente opcional do Trino no cluster e a flag enable-component-gateway para ativar o Component Gateway, o que lhe permite aceder à IU Web do Trino a partir da Google Cloud consola.
Prepare os dados
Exporte o conjunto de dados bigquery-public-data chicago_taxi_trips para o Cloud Storage como ficheiros CSV e, em seguida, crie uma tabela externa do Hive para referenciar os dados.
Executar consultas
Pode executar consultas localmente a partir da CLI do Trino ou de uma aplicação.
Consultas da CLI do Trino
Esta secção demonstra como consultar o conjunto de dados de táxis do Hive Parquet através da CLI do Trino.
Consultas de aplicações Java
Para executar consultas a partir de uma aplicação Java através do controlador JDBC Java do Trino:
1. Transfira o controlador JDBC Java do Trino.
1. Adicione uma dependência trino-jdbc no ficheiro Maven pom.xml.
<dependency> <groupId>io.trino</groupId> <artifactId>trino-jdbc</artifactId> <version>376</version> </dependency>
package dataproc.codelab.trino;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class TrinoQuery {
  private static final String URL = "jdbc:trino://trino-cluster-m:8080/hive/default";
  private static final String SOCKS_PROXY = "localhost:1080";
  private static final String USER = "user";
  private static final String QUERY =
      "select count(*) as count from chicago_taxi_trips_parquet where trip_miles > 50";
  public static void main(String[] args) {
    try {
      Properties properties = new Properties();
      properties.setProperty("user", USER);
      properties.setProperty("socksProxy", SOCKS_PROXY);
      Connection connection = DriverManager.getConnection(URL, properties);
      try (Statement stmt = connection.createStatement()) {
        ResultSet rs = stmt.executeQuery(QUERY);
        while (rs.next()) {
          int count = rs.getInt("count");
          System.out.println("The number of long trips: " + count);
        }
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }
}Registo e monitorização
Registo
Os registos do Trino encontram-se em /var/log/trino/ nos nós principais e de trabalho do cluster.
IU da Web
Consulte o artigo Ver e aceder aos URLs do gateway de componentes para abrir a IU Web do Trino em execução no nó principal do cluster no seu navegador local.
Monitorização
O Trino expõe informações de tempo de execução do cluster através de tabelas de tempo de execução.
Numa sessão do Trino (a partir do comando trino:default),
execute a seguinte consulta para ver os dados da tabela de tempo de execução:
select * FROM system.runtime.nodes;
Limpar
Depois de concluir o tutorial, pode limpar os recursos que criou para que deixem de usar a quota e incorrer em custos. As secções seguintes descrevem como eliminar ou desativar estes recursos.
Elimine o projeto
A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.
Para eliminar o projeto: