Executar consultas no Azure Cosmos DB for PostgreSQL

APLICA-SE A: Azure Cosmos DB for PostgreSQL (da plataforma da extensão de dados Citus para PostgreSQL)

Pré-requisitos

Para seguir este início rápido, primeiro você precisará:

  1. Criar um cluster no Portal do Azure.
  2. Conectar-se ao cluster com psql para executar comandos SQL.
  3. Criar e distribuir tabelas com o conjunto de dados de exemplo.

Consultas distribuídas

Agora é hora da parte divertida da série de guias de início rápido – Executar consultas. Vamos começar com um count (*) simples para verificar quantos dados carregamos na seção anterior.

-- count all rows (across shards)

SELECT count(*) FROM github_users;
 count
--------
 264308
(1 row)

Lembre-se de que github_users é uma tabela distribuída, o que significa que os dados são divididos entre vários fragmentos. O Azure Cosmos DB for PostgreSQL executa a contagem em todos os fragmentos automaticamente e em paralelo e combina os resultados.

Vamos continuar observando mais alguns exemplos de consulta:

-- Find all events for a single user.
-- (A common transactional/operational query)

SELECT created_at, event_type, repo->>'name' AS repo_name
  FROM github_events
 WHERE user_id = 3861633;
     created_at      |  event_type  |              repo_name
---------------------+--------------+--------------------------------------
 2016-12-01 06:28:44 | PushEvent    | sczhengyabin/Google-Image-Downloader
 2016-12-01 06:29:27 | CreateEvent  | sczhengyabin/Google-Image-Downloader
 2016-12-01 06:36:47 | ReleaseEvent | sczhengyabin/Google-Image-Downloader
 2016-12-01 06:42:35 | WatchEvent   | sczhengyabin/Google-Image-Downloader
 2016-12-01 07:45:58 | IssuesEvent  | sczhengyabin/Google-Image-Downloader
(5 rows)

Consultas mais complicadas

Veja um exemplo de uma consulta mais complicada, que recupera estatísticas por hora de eventos de push do GitHub. Ele usa o recurso JSONB do PostgreSQL para processar dados semiestruturados.

-- Querying JSONB type. Query is parallelized across nodes.
-- Find the number of commits on the default branch per hour 

SELECT date_trunc('hour', created_at) AS hour,
       sum((payload->>'distinct_size')::int) AS num_commits
FROM   github_events
WHERE  event_type = 'PushEvent' AND
       payload @> '{"ref":"refs/heads/master"}'
GROUP BY hour
ORDER BY hour;
        hour         | num_commits
---------------------+-------------
 2016-12-01 05:00:00 |       13051
 2016-12-01 06:00:00 |       43480
 2016-12-01 07:00:00 |       34254
 2016-12-01 08:00:00 |       29307
(4 rows)

O Azure Cosmos DB for PostgreSQL combina o poder dos armazenamentos de dados SQL e NoSQL com dados estruturados e semiestruturados.

Além de executar consultas, o Azure Cosmos DB for PostgreSQL também aplica alterações de definição de dados nos fragmentos de uma tabela distribuída:

-- DDL commands that are also parallelized

ALTER TABLE github_users ADD COLUMN dummy_column integer;

Próximas etapas

Você criou um cluster escalonável, criou tabelas, distribuiu essas tabelas, carregou dados e executou consultas distribuídas.

Agora, você está pronto para aprender a criar aplicativos com o Azure Cosmos DB for PostgreSQL.