Conectando-se ao Presto servidor

Presto O CLI fornece um shell interativo baseado em terminal para executar consultas.

Em IBM® watsonx.data, você pode se conectar ao servidor Presto de várias maneiras com base na plataforma e nos utilitários que estiver usando. Consulte as seções a seguir para obter mais detalhes:

Deve-se especificar o local ao criar o esquema usando a CLI. Por exemplo, location = s3a://<storage-name>/

Pré-requisitos

Obtenção dos detalhes do nome do host e da porta do mecanismo Presto

  1. Faça login no console watsonx.data da web.

  2. Acesse Gerenciador de infraestrutura e clique em Visualização de lista

  3. Na guia Mecanismos clique no nome do mecanismo para o qual você precisa do nome do host e detalhes da porta.

  4. No rótulo Host, clique no ícone Copiar para a área de transferência para copiar os detalhes do host.

  5. Copie os detalhes do host para um bloco de notas

Obtendo a chave de API da IBM ou o token do IAM IBM

Use a chave de API IBM ou o token do IAM IBM de acordo com seus requisitos.

É recomendado usar o token do IAM para carga de trabalho de estresse.

Obter chave IBM API

Se você ativou External Identity Interactions Limited o recurso e está usando chaves API para se comunicar com watsonx.data, você deve criar a chave API a partir da conta onde o recurso watsonx.data está provisionado.

  1. Faça login no IBM Cloud console.

  2. Na barra de navegação, clique em Gerenciar e selecione Acesso (IAM).

  3. Clique em Chaves API na barra de navegação à esquerda.

  4. Clique em Criar +.

  5. Na janela Criar IBM Cloud, insira um nome para sua chave de API e insira a descrição apropriada para a chave. Por exemplo, ibmlhtoken testing

  6. Clique em Criar. Uma janela com a mensagem chave de API criada com sucesso é exibida

  7. Clique em Baixar para salvar a chave API em seu computador local.

  8. Abra o arquivo transferido por download e copie a chave de API para um arquivo de bloco de notas

Obtendo o token do IBM Access Management (IAM)

  1. Chame o terminal REST no IAM para obter o token IAM.

  2. Substitua <your-api-key> por sua chave IBM API.

    curl -X POST 'https://iam.cloud.ibm.com/identity/token' -H 'Content-Type: application/x-www-form-urlencoded' -d 'grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=MY_APIKEY'
    

Conectando-se ao mecanismo Presto por meio da CLI (remota) do Presto

  1. Faça o download do executável Presto jar em https://prestodb.io/getting-started/

  2. Renomeie o arquivo transferido por download como presto.. Torne-o executável com o chmod +x e execute-o

  3. Para verificar se Presto CLI está instalado, execute ./presto --version. A versão do Presto cli é exibida. Por exemplo, Presto CLI 0.281-cfbc6eb

  4. Execute os seguintes comandos no sistema em que Presto CLI está instalado. Você pode usar um dos seguintes métodos para autenticar-se Presto:

    • Usando nome de usuário e senha: Para fazer isso, execute o seguinte comando:

      • Se você estiver usando uma chave API, execute o seguinte comando:

        ./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --user ibmlhapikey_<your-username> --password
        
      • Se estiver usando o IBM token IAM, execute o seguinte comando:

        ./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --user ibmlhtoken_<your-username> --password
        

      O <your-username> será opcional se você tiver várias conexões com usuários diferentes e desejar diferenciá-las,

      Insira sua chave de API da IBM ou o token do IAM da IBM no prompt

    • Token JWT: O método JWT de autenticação está disponível por padrão a partir de 2.1.2. Execute o seguinte comando para se conectar ao presto usando o token JWT:

    Para usar esse método de autenticação nas versões anteriores do watsonx.data (anteriores ao 2.1.2 lançamento do ), entre em contato com IBM o suporte e habilite o recurso.

    ```bash {: codeblock}
    ./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --access-token <ACCESS_TOKEN>
    ```
    

    Para gerar <ACCESS_TOKEN>, use um dos seguintes métodos:

    • Para obter o token do IBM Access Management (IAM), consulte o token(IAM).

    • Obtenha <ACCESS_TOKEN> usando o seguinte comando:

      curl --location 'https://us-south.lakehouse.dev.cloud.ibm.com/lakehouse/api/v2/auth/authenticate/' \
      --header 'Content-Type: application/json' \
      --data-raw '{
       "username": "ibmlhtoken_<user-name>",
       "password": "<IAM_TOKEN>",
       "instance_id": "<instance_id>",
       "instance_name": ""
      }'
      

      <IAM_TOKEN> : Specify the token generated from (IAM) token.

      <user-name> : Specify the email id.

      <instance_id> : Specify the instance CRN.

  5. No prompt Presto, digite show catalogs;. A lista de catálogos é exibida Agora você está conectado ao mecanismo Presto em watsonx.data por meio da CLI Presto.

    presto:default> show catalogs;
    Catalog
    --------------
    iceberg_data
    jmx
    system
    tpcds
    tpch
    (5 rows)
    

Conexão com o mecanismo Presto usando JDBC

  1. Faça download e instale os últimos JDBC na máquina cliente.

  2. Inclua o arquivo jar transferido por download no caminho da classe de seu aplicativo Java

  3. Obtenha a chave de API.

    Use ibmlhapikey como nome de usuário e a chave da API como senha. Para obter mais informações, consulte Obtenção da IBM.

    A partir da watsonx.data versão 2.2.0, a autenticação usando ibmlhapikey e ibmlhtoken como nomes de usuário está obsoleta. Esses formatos serão descontinuados na 2.3.0 versão. Para garantir a compatibilidade com as próximas versões, use o novo formato:ibmlhapikey_<username> e ibmlhtoken_<username>.

  4. Obtenha o nome do host e a porta Para obter mais informações, consulte Obtenção dos detalhes do nome do host e da porta do mecanismo Presto.

  5. Crie um aplicativo Java usando a interface JDBC.. A seguir há um exemplo de fragmento Java:

    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class PrestoJdbcSample
    {
        public static void main(String[] args) throws Exception
        {
            /*
             * example of fetching the location and credentials needed to connect, from
             * environment variables
             */
            String username = System.getenv("ENG_USERNAME");
            String password = System.getenv("ENG_PASSWORD");
            String hostname = System.getenv("ENG_HOST");
            String portnumber = System.getenv("ENG_PORT");
            String presto_url = "jdbc:presto://" + hostname + ":" + portnumber;
            Connection connection = null;
            Statement statement = null;
            ResultSet resultSet = null;
            try
            {
                /* load the Presto JDBC Driver class  */
                String driverClass = "com.facebook.presto.jdbc.PrestoDriver";
                Class.forName(driverClass);
                /* Set the connection properties */
                Properties properties = new Properties();
                properties.setProperty("user", username);
                properties.setProperty("password", password);
                properties.setProperty("SSL", "true");
                /* Connect */
                connection = DriverManager.getConnection(presto_url, properties);
                /* Issue a Query */
                String query = "SELECT * FROM tpch.tiny.customer LIMIT 10";
                statement = connection.createStatement();
                resultSet = statement.executeQuery(query);
                /* iterate through the results */
                while (resultSet.next())
                {
                    String phone = resultSet.getString("phone");
                    String name = resultSet.getString("name");
                    System.out.println("phone = " + phone + ", name = " + name);
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            finally
            {
                /* clean up at the end always **/
                if (resultSet != null)
                {
                    resultSet.close();
                }
                if (statement != null)
                {
                    statement.close();
                }
                if (connection != null)
                {
                    connection.close();
                }
            }
        }
    }
    

    Substitua os parâmetros no comando pelo seguinte: <PRESTO_URL> Identifica o jdbc URL para o servidor Presto. <EMAIL_ID> com seu ID de e-mail <API_KEY> com a chave da API

    Se você estiver usando um token IBM IAM, substitua ibmapikey por ibmlhtoken e passe o token.

  6. Compile e execute o comando.

Conexão com o mecanismo Presto usando scripts Python

  1. Instale o python 3.x (3.10 ou mais recente recomendado) e pip3 na estação de trabalho do cliente.

  2. Use a interface DBAPI para consultar Presto. A seguir está um script python de amostra

    import os
    import prestodb
    username=os.environ["ENG_USERNAME"]
    password=os.environ["ENG_PASSWORD"]
    hostname=os.environ["ENG_HOST"]
    portnumber=os.environ["ENG_PORT"]
       with prestodb.dbapi.connect(
       host=hostname,
       port=portnumber,
       user=username,
       catalog='tpch',
       schema='tiny',
       http_scheme='https',
       auth=prestodb.auth.BasicAuthentication(username,password)
       ) as conn:
    cur = conn.cursor()
    cur.execute('select * from tpch.tiny.customer limit 10')
    rows = cur.fetchall()
    print(rows)
    
    

    O comando consulta as tabelas system.runtime.nodes do sistema que mostram os nós no Presto cluster. A implementação DBAPI no prestodb.dbapi fornece métodos para recuperar algumas linhas.. Por exemplo, Cursorfetchone() ou Cursor.fetchmany(). Por padrão, Cursor.fetchmany() busca uma linha. Configure prestodb.dbapi.Cursor.arraysize adequadamente.

  3. Compile e execute o comando.