Partilhar via


Gerir ficheiros em volumes do Catálogo Unity com o Databricks ODBC Driver (Simba)

Esta página descreve como carregar, descarregar e eliminar ficheiros em volumes do Catálogo Unity usando o Driver Databricks ODBC.

Requisitos

  • Databricks ODBC Driver versão 2.8.2 ou superior
  • Modo de consulta nativo ativado (predefinido). Se estiver desativado, adicione UseNativeQuery=1 ou UseNativeQuery=2 à sua cadeia de ligação.

Para um exemplo completo de Python com configuração de autenticação, veja Ligar Python e pyodbc ao Azure Databricks.

Carregar um ficheiro

Para carregar um ficheiro, adiciona a StagingAllowedLocalPaths propriedade à tua string de ligação com o caminho do ficheiro a carregar. Para múltiplas localizações de fonte, use uma lista separada por vírgulas (por exemplo, /tmp/,/usr/tmp/).

Importante

Em ambientes multi-inquilino nos quais os utilizadores controlam o URL ODBC (como ferramentas de BI ou serviços de programação), defina StagingAllowedLocalPaths para uma localização de sandbox ou caminho inexistente. Isto impede que os utilizadores escrevam ficheiros arbitrários e interfiram com a implementação interna do serviço.

Para sobrescrever um ficheiro existente, adicione OVERWRITE à instrução.

conn_string = "".join([
    "DRIVER=", os.getenv("ODBC_DRIVER", "/Library/simba/spark/lib/libsparkodbc_sbu.dylib"),
    ";Host=", os.getenv("ODBC_HOST_NAME", "<<HOST_NAME>>"),
    ";PORT=443",
    ";HTTPPath=", os.getenv("ODBC_HTTP_PATH", "/sql/1.0/endpoints/1234567890"),
    ";AuthMech=11",
    ";SSL=1",
    ";ThriftTransport=2",
    ";SparkServerType=3",
    ";Auth_Flow=0",
    ";Auth_AccessToken=", os.getenv("API_TOKEN", "<<NO_ACCESS_TOKEN_IS_SET>>"),
    ";StagingAllowedLocalPaths=", "/tmp"),
    os.getenv("ODBC_OPTIONS", ""),
])

conn = pyodbc.connect(conn_string, autocommit=True)
cursor = conn.cursor()
cursor.execute("PUT '" +
    "/tmp/my-data.csv" +
    "' INTO '" +
    "/Volumes/main/default/my-volume/my-data.csv" +
    "' OVERWRITE")

Transferir um ficheiro

Use GET para descarregar um ficheiro de um volume para um caminho local:

conn = pyodbc.connect(conn_string, autocommit=True)
cursor = conn.cursor()
cursor.execute("GET '" +
    "/Volumes/main/default/my-volume/my-data.csv" +
    "' TO '" +
    "/tmp/my-downloaded-data.csv" +
    "'")

Eliminar um ficheiro

Use REMOVE para eliminar um ficheiro de um volume:

conn = pyodbc.connect(conn_string, autocommit=True)
cursor = conn.cursor()
cursor.execute("REMOVE '" +
    "/Volumes/main/default/my-volume/my-data.csv" +
    "'")