Bases de dados e tabelas

Uma base de dados Azure Databricks é uma coleção de tabelas. Uma tabela Azure Databricks é uma recolha de dados estruturados. Pode cache, filtrar e executar quaisquer operações suportadas pelo Apache Spark DataFrames nas tabelas Azure Databricks. Você pode consultar tabelas com APIs spark e Spark SQL.

Existem dois tipos de tabelas: global e local. Uma tabela global está disponível em todos os clusters. A Azure Databricks regista tabelas globais quer para a metásta de Azure Databricks Hive quer para uma metásta externa da Hive. Para mais detalhes sobre o suporte da Hive, consulte a compatibilidade da Apache Hive. Uma mesa local não é acessível a partir de outros clusters e não está registada na metásta de Colmeia. Isto também é conhecido como uma visão temporária.

Pode criar uma tabela utilizando o UI de tabela ou programáticamente. Uma tabela pode ser povoada a partir de ficheiros em DBFS ou dados armazenados em qualquer uma das fontes de dadossuportadas .

Requisitos

Para visualizar e criar bases de dados e tabelas, tem de ter um cluster de corrida.

Ver bases de dados e tabelas

Clique  no ícone de dados na barra lateral. A Azure Databricks seleciona um cluster de corrida ao qual tem acesso. A pasta Bases de Dados apresenta a lista de bases de dados com a default base de dados selecionada. A pasta Tabelas apresenta a lista de tabelas na default base de dados.

Criar lista de tabelas

Pode alterar o cluster a partir do menu Bases de Dados, criar UI de tabela,ou ver uI tabela. Por exemplo, a partir do menu Bases de Dados:

  1. Clique no ícone Down Caret no topo da pasta Bases de Dados.

  2. Selecione um cluster.

    Selecione cluster

Criar uma base de dados

Para criar uma base de dados em SQL:

CREATE DATABASE <database-name> ...

Para mais opções, consulte

Criar uma tabela

Pode criar uma tabela utilizando a UI ou programaticamente.

Criar uma tabela usando a UI

Nota

Quando se cria uma tabela usando a UI, não se pode

Quando se cria uma tabela utilizando a UI, cria-se uma tabela global.

  1. Clique em Ícone Dados na barra lateral. As pastas de bases de dados e tabelas são apresentadas.

  2. Na pasta Bases de Dados, selecione uma base de dados.

  3. Acima da pasta tabelas, clique em Adicionar Dados.

    Adicionar ícone de mesa

  4. Escolha uma fonte de dados e siga os passos para configurar a tabela.

    A opção Ficheiro de Upload está ativada por predefinição. Se um administrador do Azure Databricks tiver desativado esta funcionalidade,não terá a opção de carregar ficheiros, mas poderá criar tabelas utilizando ficheiros noutra fonte de dados.

    Tabela de configuração

    Ficheiro de upload

    1. Arraste ficheiros para a dropzone do Ficheiro ou clique na dropzone para navegar e escolher ficheiros. Após o upload, um caminho aparece para cada ficheiro. O caminho será algo como /FileStore/tables/<filename>-<random-number>.<file-type> e você usa este caminho em um caderno para ler dados.

      Dropzone de arquivo

    2. Clique em Criar Tabela com UI.

    3. No Cluster drop-down, escolha um cluster.

    DBFS

    1. Selecione um ficheiro.
    2. Clique em Criar Tabela com UI.
    3. No Cluster drop-down, escolha um cluster.
  5. Clique na Tabela de Pré-visualização para ver a tabela.

  6. No campo Nome de Tabela, substitua opcionalmente o nome de tabela predefinido. Um nome de mesa pode conter apenas caracteres alfanuméricos minúsculos e sublinha e deve começar com uma letra minúscula ou sublinhar.

  7. No campo Criar na Base de Dados, substituir opcionalmente a default base de dados selecionada.

  8. No campo 'Tipo de Ficheiro', substitua opcionalmente o tipo de ficheiro inferido.

  9. Se o tipo de ficheiro for CSV:

    1. No campo Delimiter da Coluna, selecione se deve anular olimiter indiado.
    2. Indicar se deve usar a primeira linha como títulos de coluna.
    3. Indique se deve inferir o esquema.
  10. Se o tipo de ficheiro for JSON, indique se o ficheiro é multi-line.

  11. Clique em Criar Tabela.

Criar uma mesa em um caderno

No II de nova tabela, pode utilizar os cadernos quickstart fornecidos pela Azure Databricks para se ligar a qualquer fonte de dados.

  • DBFS: Clique em Criar Tabela no Caderno.
  • Outras Fontes de Dados: No drop-down do Conector, selecione um tipo de fonte de dados. Em seguida, clique em Criar Tabela no Caderno.

Criar uma tabela programática

Esta secção descreve como criar tabelas globais e locais programáticas.

Criar uma tabela global

Para criar uma tabela global em SQL:

CREATE TABLE <table-name> ...

Para mais opções, consulte 'Criar Tabela'.

Para criar uma tabela global a partir de um DataFrame em Python ou Scala:

dataFrame.write.saveAsTable("<table-name>")

Criar uma mesa local

Para criar uma tabela local a partir de um DataFrame em Python ou Scala:

dataFrame.createOrReplaceTempView("<table-name>")

Aqui está um exemplo que cria uma tabela local chamada diamonds a partir de um ficheiro no Databricks File System (DBFS):

dataFrame = "/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv"
spark.read.format("csv").option("header","true")\
  .option("inferSchema", "true").load(dataFrame)\
  .createOrReplaceTempView("diamonds")

Aceda a uma mesa

Pode ver detalhes da tabela, ler, atualizar e apagar uma tabela.

Ver detalhes da tabela

A visualização dos detalhes da tabela mostra o esquema da tabela e os dados da amostra.

  1. Clique em Ícone Dados na barra lateral.

  2. Na pasta Bases de Dados, clique numa base de dados.

  3. Na pasta Tabelas, clique no nome da tabela.

  4. No cluster drop-down, selecione opcionalmente outro cluster para fazer a pré-visualização da tabela.

    Detalhes da tabela

    Nota

    Para visualizar a pré-visualização da tabela, uma consulta Spark SQL corre no cluster selecionado no cluster drop-down. Se o cluster já tiver uma carga de trabalho a funcionar, a pré-visualização da tabela pode demorar mais tempo a ser carregada.

Consulta de uma mesa

Estes exemplos mostram-lhe como consultar e exibir uma tabela chamada diamonds .

SQL

SELECT * FROM diamonds

Python

diamonds = spark.sql("select * from diamonds")
display(diamonds.select("*"))

diamonds = spark.table("diamonds")
display(diamonds.select("*"))

R

diamonds <- sql(sqlContext, "select * from diamonds")
display(diamonds)

diamonds <- table(sqlContext, "diamonds")
display(diamonds)

Scala

val diamonds = spark.sql("select * from diamonds")
display(diamonds.select("*"))

val diamonds = spark.table("diamonds")
display(diamonds.select("*"))

Atualizar tabelas

O esquema da mesa é imutável. No entanto, pode atualizar os dados da tabela alterando os ficheiros subjacentes.

Por exemplo, para as tabelas criadas a partir de um diretório de armazenamento, adicionar ou remover ficheiros nesse diretório altera o conteúdo da tabela.

Depois de atualizar os ficheiros subjacentes a uma tabela, refresque a tabela utilizando o seguinte comando:

REFRESH TABLE <table-name>

Isto garante que, ao aceder à tabela, o Spark SQL leia os ficheiros corretos mesmo que os ficheiros subjacentes mudem.

Apagar uma mesa

Eliminar uma tabela usando o UI

  1. Clique em Ícone Dados na barra lateral.
  2. Clique no  Menu Dropdown ao lado do nome da tabela e selecione Delete.

Excluir uma tabela programática

DROP TABLE <table-name>

Mesas geridas e não geridas

Todas as tabelas Spark SQL têm informações de metadados que armazenam o esquema e os dados em si.

Uma tabela gerida é uma tabela Spark SQL para a qual a Spark gere os dados e os metadados. No caso da tabela gerida, a Databricks armazena os metadados e dados em DBFS na sua conta. Uma vez que o Spark SQL gere as tabelas, fazer um DROP TABLE example_data elimina tanto os metadados como os dados.

Algumas formas comuns de criar uma tabela gerida são:

SQL

CREATE TABLE <example-table>(id STRING, value STRING)

Python

dataframe.write.saveAsTable("<example-table>")

Outra opção é permitir que o Spark SQL gere os metadados, enquanto controla a localização dos dados. Referimo-nos a isto como uma mesa nãogerida. O Spark SQL gere os metadados relevantes, por isso, quando DROP TABLE <example-table> executa, a Spark remove apenas os metadados e não os dados em si. Os dados ainda estão presentes no caminho que forneceu.

Pode criar uma tabela não gerida com os seus dados em fontes de dados como Cassandra, jdBC, e assim por diante. Consulte fontes de dados para obter mais informações sobre as fontes de dados suportadas por Databricks. Algumas formas comuns de criar uma mesa nãogerida são:

SQL

CREATE TABLE <example-table>(id STRING, value STRING) USING org.apache.spark.sql.parquet OPTIONS (PATH "<your-storage-path>")

Python

dataframe.write.option('path', "<your-storage-path>").saveAsTable("<example-table>")

Substitua o conteúdo da tabela

Existem duas abordagens principais para substituir o conteúdo da tabela: simples e recomendado.

Forma simples de substituir o conteúdo da tabela

A forma mais simples de substituir o conteúdo da tabela é eliminar os metadados e dados da tabela e criar outra tabela.

Tabela gerida
DROP TABLE IF EXISTS <example-table>     // deletes the metadata and data
CREATE TABLE <example-table> AS SELECT ...
Mesa não gerido
DROP TABLE IF EXISTS <example-table>         // deletes the metadata
dbutils.fs.rm("<your-storage-path>", true)   // deletes the data
CREATE TABLE <example-table> using org.apache.spark.sql.parquet OPTIONS (path "<your-storage-path>") AS SELECT ...

Uma alternativa é:

  1. Crie a tabela utilizando o SQL DDL:

    CREATE TABLE <table-name> (id long, date string) USING PARQUET LOCATION "<storage-location>"
    
  2. Armazenar novos dados em <storage-location> .

  3. Execute refresh table <table-name>.

Para evitar potenciais problemas de consistência, a melhor abordagem para substituir o conteúdo da mesa é substituir a tabela.

Python
dataframe.write.mode("overwrite").saveAsTable("<example-table>") // Managed Overwrite
dataframe.write.mode("overwrite").option("path","<your-storage-path>").saveAsTable("<example-table>")  // Unmanaged Overwrite
SQL

Use a insert overwrite palavra-chave. Este método aplica-se às tabelas geridas e não geridas. Por exemplo, para uma tabela nãogerida:

CREATE TABLE <example-table>(id STRING, value STRING) USING org.apache.spark.sql.parquet OPTIONS (PATH "<your-storage-path>")
INSERT OVERWRITE TABLE <example-table> SELECT ...
Scala
dataframe.write.mode(SaveMode.Overwrite).saveAsTable("<example-table>")    // Managed Overwrite
dataframe.write.mode(SaveMode.Overwrite).option("path", "<your-storage-path>").saveAsTable("<example-table>")  // Unmanaged Overwrite

Mesas divididas

O Spark SQL é capaz de gerar divisórias dinamicamente ao nível de armazenamento de ficheiros para fornecer colunas de partição para as tabelas.

Criar uma mesa dividida

Estes exemplos de dados de partição que escreve. Spark SQL descobre as divisórias e regista-as na metásta da Colmeia.

// Create managed table as select
dataframe.write.mode(SaveMode.Overwrite).partitionBy("id").saveAsTable("<example-table>")

// Create unmanaged/external table as select
dataframe.write.mode(SaveMode.Overwrite).option("path", "<file-path>").saveAsTable("<example-table>")

No entanto, se criar uma tabela dividida a partir dos dados existentes, o Spark SQL não descobre automaticamente as divisórias e regista-as na metastore da Hive. Neste caso, SELECT * FROM <example-table> não devolve resultados. Para registar as divisórias, corra o seguinte para gerar as divisórias: MSCK REPAIR TABLE "<example-table>" .

// Save data to external files
dataframe.write.mode(SaveMode.Overwrite).partitionBy("id").parquet("<file-path>")

// Create unmanaged/external table
spark.sql("CREATE TABLE <example-table>(id STRING, value STRING) USING parquet PARTITIONED BY(id) LOCATION "<file-path>"")
spark.sql("MSCK REPAIR TABLE "<example-table>"")

Poda de partição

Quando a tabela é digitalizada, a Spark empurra os predicados do filtro que envolvem as partitionBy teclas. Nesse caso, a Spark evita ler dados que não satisfazem esses predicados. Por exemplo, suponha que tem uma mesa <example-data> que é dividida por <date> . Uma consulta como SELECT max(id) FROM <example-data> WHERE date = '2010-10-10' lê-se apenas os ficheiros de dados que contêm tuples cujo date valor corresponde ao especificado na consulta.

Controlo de acesso a tabelas

O controlo do acesso à mesa permite que administradores e utilizadores dêem acesso fino a outros utilizadores. Consulte os privilégios do objeto Data para mais detalhes.