Administración de archivos en volúmenes de Catálogo de Unity con el controlador ODBC de Databricks

En este artículo se describe cómo cargar, descargar y eliminar archivos en el catálogo de Unity volúmenes mediante el controlador ODBC Databricks.

Requisitos

  • Controlador ODBC de Databricks versiones 2.8.2 o posteriores.
  • De manera predeterminada, el modo de consulta nativa está habilitado. De lo contrario, agregue UseNativeQuery propiedad a la cadena de conexión ODBC, estableciendo su valor en 1 o 2.

Cargar un archivo

Para cargar un archivo en un volumen, debe agregar la propiedad StagingAllowedLocalPaths a la cadena de conexión ODBC, estableciendo este valor de propiedad en la ruta de acceso del archivo que se va a cargar. Para cargar varios archivos desde ubicaciones distintas, establezca esta propiedad en una lista de rutas separadas por comas, por ejemplo /tmp/,/usr/tmp/.

Para invalidar el contenido de cualquier archivo existente en la ubicación de carga especificada, agregue OVERWRITE.

El siguiente fragmento de código de Python muestra cómo cargar un archivo en un volumen.

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")

Descarga de un archivo

El siguiente fragmento de código de Python muestra cómo descargar un archivo de un volumen.

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 un archivo

El siguiente fragmento de código de Python muestra cómo eliminar un archivo de un volumen.

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