DataLinq.Snowflake
1.2.0
dotnet add package DataLinq.Snowflake --version 1.2.0
NuGet\Install-Package DataLinq.Snowflake -Version 1.2.0
<PackageReference Include="DataLinq.Snowflake" Version="1.2.0" />
<PackageVersion Include="DataLinq.Snowflake" Version="1.2.0" />
<PackageReference Include="DataLinq.Snowflake" />
paket add DataLinq.Snowflake --version 1.2.0
#r "nuget: DataLinq.Snowflake, 1.2.0"
#:package DataLinq.Snowflake@1.2.0
#addin nuget:?package=DataLinq.Snowflake&version=1.2.0
#tool nuget:?package=DataLinq.Snowflake&version=1.2.0
DataLinq.Snowflake
LINQ-native Snowflake integration for DataLinq.Net.
dotnet add package DataLinq.Snowflake --version 1.2.0
Features
- Native LINQ Translation - Write C# LINQ, execute Snowflake SQL
- Streaming Results - Row-by-row processing with
IAsyncEnumerable - Type Safety - Strong typing with automatic column mapping
- SQL Injection Prevention - Parameterized queries by default
- O(1) Memory Writes - Native streaming via PUT + COPY INTO
- Cases Pattern - Multi-output conditional routing
- Auto-UDF — Custom methods in Where/Select/OrderBy/GroupBy auto-translate to Snowflake UDFs (static, instance, lambda, entity-param)
- ForEach — Server-side iteration via stored procedures with static field sync-back
- Pull() Escape Hatch - Switch to client-side streaming for edge cases
Quick Start
using DataLinq.SnowflakeQuery;
// Connect to Snowflake
using var context = Snowflake.Connect(
account: "xy12345.us-east-1",
user: "myuser",
password: "mypass",
database: "MYDB",
warehouse: "COMPUTE_WH"
);
// Query with LINQ (server-side SQL)
var orders = await context.Read.Table<Order>("orders")
.Where(o => o.Amount > 1000)
.OrderByDescending(o => o.OrderDate)
.Take(100)
.ToList();
// Client-side processing requires explicit Pull()
await context.Read.Table<Order>("orders")
.Where(o => o.Status == "Active") // Server-side SQL
.Pull() // ← Switch to client
.ForEach(o => Console.WriteLine(o)) // Client-side C#
.Do();
// Update specific columns only (type-safe expressions)
await records.MergeTable(context, "ORDERS", o => o.OrderId)
.UpdateOnly(o => o.Status, o => o.UpdatedAt);
Nested Objects (VARIANT)
Access Snowflake VARIANT columns with natural C# property syntax:
// Model with nested properties
public class Order {
public int Id { get; set; }
[Variant] // Marks column as VARIANT
public OrderData Data { get; set; }
}
// Query nested properties - translates to colon syntax
var parisOrders = await context.Read.Table<Order>("ORDERS")
.Where(o => o.Data.Customer.City == "Paris")
.ToList();
// SQL: WHERE data:customer:city = 'Paris'
Write Operations
Snowflake uses native IAsyncEnumerable streaming - O(1) memory, no config needed:
// Bulk insert (streams via PUT + COPY INTO)
await records.WriteTable(context, "ORDERS");
await records.WriteTable(context, "ORDERS").CreateIfMissing();
await records.WriteTable(context, "ORDERS").Overwrite();
// Upsert (merge) on key
await records.MergeTable(context, "ORDERS", o => o.OrderId);
// Update specific columns only (type-safe expressions)
await records.MergeTable(context, "ORDERS", o => o.OrderId)
.UpdateOnly(o => o.Status, o => o.UpdatedAt);
Requirements
- .NET 8.0+
- DataLinq.Net 1.0.0+
Support & Issues
📧 Contact: support@get-datalinq.net
🐛 Report Issues: github.com/improveTheWorld/DataLinq.NET/issues
License
Free Tier (No Setup Required)
DataLinq.Snowflake works out of the box with no license and no configuration. The free tier caps queries at 1,000 rows — no environment variables, no debugger detection, no opt-in needed. Just install and run.
Production License
For unlimited rows, obtain a license at:
- 🌐 Pricing: https://get-datalinq.net/pricing
- 📧 Contact: support@get-datalinq.net
Set your license key as an environment variable (auto-detected at runtime):
# PowerShell
$env:DATALINQ_LICENSE_KEY="your-license-key"
# Bash/Linux/macOS
export DATALINQ_LICENSE_KEY="your-license-key"
# Docker / Kubernetes
ENV DATALINQ_LICENSE_KEY=your-license-key
Security: The license key is never in source code. Set it in your deployment environment (CI/CD secrets, Azure Key Vault, AWS Secrets Manager, etc.)
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- DataLinq.Net (>= 1.0.0)
- Snowflake.Data (>= 5.2.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
v1.2.0: RSA key-pair authentication, acronym-aware column naming (IPAddress→ip_address), simplified licensing (free tier default, no env var needed), write result type fix (int→long), parameter contamination fix in set operations. Full notes: https://github.com/improveTheWorld/DataLinq.NET/blob/main/releasenotes/DataLinq.Snowflake_1.2.0.md