Public/duckdb/Export-DuckDBToParquet.ps1

function Export-DuckDBToParquet {
    <#
    .SYNOPSIS
        Exports a DuckDB table as a Parquet file (e.g. for use with external tools).
    .PARAMETER Compression
        Compression algorithm: SNAPPY (default), ZSTD, GZIP, NONE
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$false)] [DuckDB.NET.Data.DuckDBConnection]$Connection = $null,
        [Parameter(Mandatory)] [string]$TableName,
        [Parameter(Mandatory)] [string]$OutputPath,
        [ValidateSet('SNAPPY','ZSTD','GZIP','NONE')]
        [string]$Compression = 'ZSTD'
    )

    if ($null -eq $Connection) {
        $Connection = $Script:DefaultConnection
        if ($null -eq $Connection) { throw "No active DuckDB connection. Provide -Connection or call Initialize-SQLPipeline first." }
    }

    $dir = Split-Path $OutputPath -Parent
    if ($dir -and -not (Test-Path $dir)) { New-Item -ItemType Directory -Path $dir | Out-Null }

    Invoke-DuckDBQuery -Connection $Connection -Query @"
        COPY $TableName TO '$OutputPath'
        (FORMAT PARQUET, COMPRESSION $Compression)
"@

    Write-Information "[$TableName] Parquet exported: $OutputPath"
}