A comprehensive VS Code extension for editing, executing, and managing Apache Flink SQL queries with integrated gateway session management, job monitoring, and catalog exploration.
- Advanced Flink SQL Editor: Custom editor with syntax highlighting for
.flink.sqlfiles - Query Execution: Execute selected SQL or entire documents with real-time progress tracking
- Batch Execution: Execute multiple SQL statements sequentially with comprehensive reporting
- Results Visualization: Rich webview-based results panel with tabular data display
- Export Capabilities: Export query results in multiple formats
- Flink SQL Gateway Integration: Connect to local or remote Flink SQL Gateway instances
- Session Management: Create, manage, and monitor Flink SQL sessions
- Auto-Reconnection: Intelligent reconnection with configurable keep-alive intervals
- Authentication Support: Basic auth, bearer tokens, and custom authentication
- Real-time Job Monitoring: View running, completed, failed, and cancelled jobs
- Job Management: Stop and cancel running jobs with confirmation dialogs
- Job Details: Comprehensive job information with status, duration, and metadata
- Auto-refresh: Configurable automatic job list refreshing
- Catalog Browser: Explore databases, tables, and schemas in tree view
- Table Operations: Set active catalogs, insert table references into queries
- Metadata Inspection: View table structures, column types, and properties
- Auto-refresh: Automatic catalog updates when connecting
- Integrated Logging: Comprehensive logging with configurable levels
- Error Handling: Rich error reporting with context and suggestions
- Keyboard Shortcuts: Efficient shortcuts for common operations
- Command Palette: Full command palette integration
- Open VS Code
- Go to Extensions (Ctrl+Shift+X)
- Search for "Flink SQL Workbench"
- Click Install
- Download the
.vsixfile from releases - Open VS Code
- Press Ctrl+Shift+P and type "Extensions: Install from VSIX"
- Select the downloaded file
- Recommended: Use a credential manager extension to store your connections securely
- Set up your connection in the credential manager with type
flink-gateway - Configure the connection ID in VS Code settings:
flinkSqlWorkbench.gateway.connectionId
All authentication is now handled through a credential manager extension:
{
"flinkSqlWorkbench.gateway.connectionId": "your-connection-id"
}Your credential manager should have a connection configured like:
{
"id": "your-connection-id",
"name": "Production Flink Gateway",
"type": "flink-gateway",
"url": "https://flink-gateway.example.com:8083",
"authType": "basic",
"username": "your-username"
}For development environments without authentication:
{
"flinkSqlWorkbench.gateway.url": "http://localhost:8083",
"flinkSqlWorkbench.gateway.apiVersion": "auto",
"flinkSqlWorkbench.gateway.timeout": 30000
}
### Session Configuration
#### Default Session Properties
```json
{
"flinkSqlWorkbench.session.properties": {
"execution.runtime-mode": "streaming",
"table.exec.resource.default-parallelism": "1",
"execution.checkpointing.interval": "10s",
"execution.checkpointing.externalized-checkpoint-retention": "RETAIN_ON_CANCELLATION"
}
}{
"flinkSqlWorkbench.session.sessionName": "my-vscode-session",
"flinkSqlWorkbench.session.autoReconnect": true,
"flinkSqlWorkbench.session.keepAliveInterval": 300000
}{
"flinkSqlWorkbench.results.maxRows": 1000,
"flinkSqlWorkbench.results.pageSize": 100,
"flinkSqlWorkbench.results.autoRefresh": false,
"flinkSqlWorkbench.results.refreshInterval": 5000
}{
"flinkSqlWorkbench.catalog.autoRefresh": true,
"flinkSqlWorkbench.jobs.autoRefresh": true,
"flinkSqlWorkbench.jobs.refreshInterval": 10000
}- Create a Flink SQL file: Create a new file with
.flink.sqlextension - Configure connection: Set your Flink SQL Gateway URL in settings
- Connect to gateway: Use Command Palette β "Connect to Flink Gateway"
- Write queries: Start writing Flink SQL queries with syntax highlighting
- Execute queries: Use Ctrl+Enter to execute selected text or entire document
.flink.sql- Flink SQL files with full editor support.fsql- Alternative extension for Flink SQL files
| Shortcut | Action |
|---|---|
Ctrl+Enter |
Execute selected query or current line |
Ctrl+Shift+Enter |
Execute all queries in file |
F5 |
Refresh active panel (jobs, catalog, sessions) |
Flink SQL: Execute Query- Execute selected SQL or entire documentFlink SQL: Execute All Queries- Execute all statements in fileFlink SQL: Show Query Results- Open results panel
Flink SQL: Connect to Gateway- Connect to Flink SQL GatewayFlink SQL: Disconnect from Gateway- Disconnect from gatewayFlink SQL: Test Connection- Test gateway connection
Flink SQL: Create Session- Create new Flink sessionFlink SQL: Delete Session- Delete current sessionFlink SQL: View Session Info- Show session detailsFlink SQL: Refresh Sessions- Refresh session list
Flink SQL: Refresh Jobs- Refresh job listFlink SQL: Toggle Jobs Auto Refresh- Enable/disable auto-refreshFlink SQL: Stop Job- Gracefully stop selected jobFlink SQL: Cancel Job- Force cancel selected jobFlink SQL: View Job Details- Show detailed job information
Flink SQL: Refresh Catalog- Refresh catalog treeFlink SQL: Set Catalog- Set active catalogFlink SQL: Insert Table Reference- Insert table name at cursor
- View active and available sessions
- Create new sessions with custom properties
- Delete unused sessions
- Monitor session health and connection status
- Monitor running, completed, and failed jobs
- Right-click running jobs to stop or cancel
- View job details including duration, status, and metadata
- Auto-refresh for real-time monitoring
- Browse catalogs, databases, and tables
- Set active catalog for queries
- Insert table references directly into editor
- View table schemas and metadata
- View query results in formatted tables
- Export results to various formats
- Handle streaming query results with auto-refresh
- Navigate large result sets with pagination
| Setting | Type | Default | Description |
|---|---|---|---|
flinkSqlWorkbench.gateway.connectionId |
string | "" |
Required: Connection ID from credential manager |
flinkSqlWorkbench.gateway.url |
string | http://localhost:8083 |
Flink SQL Gateway URL (overridden by connection) |
flinkSqlWorkbench.gateway.useProxy |
boolean | false |
Use proxy for CORS issues |
flinkSqlWorkbench.gateway.apiVersion |
string | auto |
API version (v1, v2, auto) |
flinkSqlWorkbench.gateway.timeout |
number | 30000 |
Request timeout (ms) |
flinkSqlWorkbench.gateway.maxRetries |
number | 3 |
Max retry attempts |
| Setting | Type | Default | Description |
|---|---|---|---|
flinkSqlWorkbench.session.sessionName |
string | vscode-session |
Default session name |
flinkSqlWorkbench.session.autoReconnect |
boolean | true |
Auto-reconnect on disconnect |
flinkSqlWorkbench.session.keepAliveInterval |
number | 300000 |
Keep-alive interval (ms) |
flinkSqlWorkbench.session.properties |
object | See below | Default session properties |
{
"execution.runtime-mode": "streaming",
"table.exec.resource.default-parallelism": "1",
"execution.checkpointing.interval": "10s"
}| Setting | Type | Default | Description |
|---|---|---|---|
flinkSqlWorkbench.editor.autoComplete |
boolean | true |
Enable auto-completion |
flinkSqlWorkbench.editor.autoSave |
boolean | true |
Auto-save before execution |
| Setting | Type | Default | Description |
|---|---|---|---|
flinkSqlWorkbench.results.maxRows |
number | 1000 |
Max rows to display |
flinkSqlWorkbench.results.pageSize |
number | 100 |
Rows per page |
flinkSqlWorkbench.results.autoRefresh |
boolean | false |
Auto-refresh streaming results |
flinkSqlWorkbench.results.refreshInterval |
number | 5000 |
Refresh interval (ms) |
| Setting | Type | Default | Description |
|---|---|---|---|
flinkSqlWorkbench.catalog.autoRefresh |
boolean | false |
Auto-refresh catalog |
flinkSqlWorkbench.jobs.autoRefresh |
boolean | false |
Auto-refresh jobs |
flinkSqlWorkbench.jobs.refreshInterval |
number | 10000 |
Jobs refresh interval (ms) |
| Setting | Type | Default | Description |
|---|---|---|---|
flinkSqlWorkbench.logging.level |
string | info |
Log level (trace, debug, info, warn, error) |
flinkSqlWorkbench.logging.enableNetworkLogging |
boolean | false |
Enable network request logging |
| Setting | Type | Default | Description |
|---|---|---|---|
flinkSqlWorkbench.ui.theme |
string | auto |
Panel theme (auto, dark, light) |
You can configure Flink session properties for specific use cases:
{
"flinkSqlWorkbench.session.properties": {
"execution.runtime-mode": "batch",
"table.exec.resource.default-parallelism": "4"
}
}{
"flinkSqlWorkbench.session.properties": {
"execution.runtime-mode": "streaming",
"execution.checkpointing.interval": "10s",
"execution.checkpointing.externalized-checkpoint-retention": "RETAIN_ON_CANCELLATION",
"state.backend": "filesystem",
"state.checkpoints.dir": "file:///path/to/checkpoints"
}
}Use VS Code workspace settings for project-specific configurations:
// .vscode/settings.json
{
"flinkSqlWorkbench.gateway.url": "https://production-flink.example.com:8083",
"flinkSqlWorkbench.gateway.authentication.apiToken": "${FLINK_API_TOKEN}",
"flinkSqlWorkbench.session.properties": {
"execution.runtime-mode": "streaming",
"table.exec.resource.default-parallelism": "8"
}
}-
Enable auto-refresh for streaming results:
{ "flinkSqlWorkbench.results.autoRefresh": true, "flinkSqlWorkbench.results.refreshInterval": 2000 } -
Use LIMIT for streaming queries to prevent overwhelming results:
SELECT * FROM streaming_table LIMIT 100;
-
Monitor jobs in the Jobs panel to track streaming query status
- Verify gateway URL in settings
- Check that Flink SQL Gateway is running
- Verify network connectivity and firewall settings
- Check authentication credentials
- Check session status in Sessions panel
- Verify SQL syntax is valid for Flink
- Check gateway logs for detailed error messages
- Ensure required catalogs and tables exist
- Check Results panel is open (Command: "Show Query Results")
- Verify query completed successfully
- Check if query returns empty result set
- Look for errors in Output panel
- Reduce
results.maxRowsfor large result sets - Disable auto-refresh for heavy queries
- Use pagination with
results.pageSize - Check network latency to gateway
Enable debug logging for troubleshooting:
{
"flinkSqlWorkbench.logging.level": "debug",
"flinkSqlWorkbench.logging.enableNetworkLogging": true
}View logs in: View β Output β Flink SQL - Main
- Clone the repository
- Install dependencies:
npm install - Open in VS Code
- Press F5 to launch Extension Development Host
# Install dependencies
npm install
# Compile TypeScript
npm run compile
# Watch mode for development
npm run watch
# Package extension
npm run package# Run linting
npm run lint
# Run tests
npm testThis project is licensed under the MIT License - see the LICENSE file for details.
- Apache Flink - Stream processing framework
- Flink SQL Gateway - REST API for Flink SQL
- Initial release
- Core Flink SQL editing and execution
- Gateway connection management
- Session management
- Job monitoring and control
- Catalog exploration
- Results visualization
- Comprehensive configuration options
- Issues: Report bugs and feature requests on GitHub
- Documentation: Visit the project wiki for detailed guides
- Community: Join discussions in project forums
Happy querying with Flink SQL! π