You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
5.3 KiB
148 lines
5.3 KiB
---
|
|
# ConfigMap for SQL Gateway Configuration
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: sql-gateway-config
|
|
namespace: {{ include "flink-sql-gateway.namespace" . }}
|
|
labels:
|
|
{{- include "flink-sql-gateway.labels" . | nindent 4 }}
|
|
{{- with .Values.global.annotations }}
|
|
annotations:
|
|
{{- toYaml . | nindent 4 }}
|
|
{{- end }}
|
|
data:
|
|
sql-gateway-defaults.yaml: |
|
|
# SQL Gateway Configuration
|
|
sql-gateway:
|
|
endpoint:
|
|
rest:
|
|
address: {{ .Values.sqlGateway.config.endpoint.rest.address }}
|
|
port: {{ .Values.sqlGateway.config.endpoint.rest.port }}
|
|
bind-address: {{ .Values.sqlGateway.config.endpoint.rest.bindAddress }}
|
|
session:
|
|
max-num: {{ .Values.sqlGateway.config.session.maxNum }}
|
|
idle-timeout: {{ .Values.sqlGateway.config.session.idleTimeout }}
|
|
check-interval: {{ .Values.sqlGateway.config.session.checkInterval }}
|
|
plan-cache:
|
|
enabled: {{ .Values.sqlGateway.config.session.planCache.enabled }}
|
|
max-size: {{ .Values.sqlGateway.config.session.planCache.maxSize }}
|
|
ttl: {{ .Values.sqlGateway.config.session.planCache.ttl }}
|
|
{{- if .Values.sqlClient.enabled }}
|
|
---
|
|
# ConfigMap with sample SQL scripts
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: sql-test-scripts
|
|
namespace: {{ include "flink-sql-gateway.namespace" . }}
|
|
labels:
|
|
{{- include "flink-sql-gateway.labels" . | nindent 4 }}
|
|
{{- with .Values.global.annotations }}
|
|
annotations:
|
|
{{- toYaml . | nindent 4 }}
|
|
{{- end }}
|
|
data:
|
|
01-create-tables.sql: |
|
|
-- Example SQL script for creating tables
|
|
-- This is a template - modify according to your data sources
|
|
|
|
-- Example: Create source table (replace with your connector)
|
|
CREATE TABLE source_table (
|
|
id STRING,
|
|
message STRING,
|
|
timestamp_field TIMESTAMP(3),
|
|
WATERMARK FOR timestamp_field AS timestamp_field - INTERVAL '5' SECOND
|
|
) WITH (
|
|
'connector' = 'your-connector', -- e.g., 'kafka', 'filesystem', etc.
|
|
-- Add your connector-specific properties here
|
|
'format' = 'json'
|
|
);
|
|
|
|
-- Example: Create sink table (replace with your connector)
|
|
CREATE TABLE sink_table (
|
|
id STRING,
|
|
processed_message STRING,
|
|
original_timestamp TIMESTAMP(3),
|
|
processing_time TIMESTAMP(3)
|
|
) WITH (
|
|
'connector' = 'your-connector', -- e.g., 'kafka', 'filesystem', etc.
|
|
-- Add your connector-specific properties here
|
|
'format' = 'json'
|
|
);
|
|
|
|
02-simple-query.sql: |
|
|
-- Simple filtering and transformation query
|
|
INSERT INTO sink_table
|
|
SELECT
|
|
id,
|
|
CONCAT('Processed: ', message) as processed_message,
|
|
timestamp_field as original_timestamp,
|
|
CURRENT_TIMESTAMP as processing_time
|
|
FROM source_table
|
|
WHERE LENGTH(message) > 5;
|
|
|
|
03-windowed-aggregation.sql: |
|
|
-- Windowed aggregation example
|
|
SELECT
|
|
TUMBLE_START(timestamp_field, INTERVAL '1' MINUTE) as window_start,
|
|
TUMBLE_END(timestamp_field, INTERVAL '1' MINUTE) as window_end,
|
|
COUNT(*) as message_count,
|
|
COUNT(DISTINCT id) as unique_ids
|
|
FROM source_table
|
|
GROUP BY TUMBLE(timestamp_field, INTERVAL '1' MINUTE);
|
|
|
|
test-data-generator.sql: |
|
|
-- Generate test data (for manual testing)
|
|
-- This would typically be done by external producer
|
|
-- Example JSON format for input data:
|
|
-- {"id": "msg001", "message": "Hello World", "timestamp_field": "2024-12-10T10:00:00.000Z"}
|
|
-- {"id": "msg002", "message": "Test Message", "timestamp_field": "2024-12-10T10:01:00.000Z"}
|
|
|
|
README.md: |
|
|
# Flink SQL Client Usage
|
|
|
|
## Connect to SQL Gateway with Remote Cluster
|
|
```bash
|
|
# Connect to SQL Gateway and specify remote cluster
|
|
kubectl exec -it {{ .Values.sqlClient.name }} -n {{ include "flink-sql-gateway.namespace" . }} -- /opt/flink/bin/sql-client.sh gateway \
|
|
--endpoint http://{{ .Values.sqlGateway.name }}:{{ .Values.sqlGateway.port }} \
|
|
-Dexecution.target=remote \
|
|
-Drest.address={{ .Values.sessionCluster.name }}-rest \
|
|
-Drest.port=8081
|
|
```
|
|
|
|
## Alternative: Set execution config in SQL
|
|
```bash
|
|
# Connect to SQL Gateway
|
|
kubectl exec -it {{ .Values.sqlClient.name }} -n {{ include "flink-sql-gateway.namespace" . }} -- /opt/flink/bin/sql-client.sh gateway --endpoint http://{{ .Values.sqlGateway.name }}:{{ .Values.sqlGateway.port }}
|
|
|
|
# Then in SQL Client, set execution config:
|
|
SET 'execution.target' = 'remote';
|
|
SET 'rest.address' = '{{ .Values.sessionCluster.name }}-rest';
|
|
SET 'rest.port' = '8081';
|
|
```
|
|
|
|
## Run SQL Scripts
|
|
```bash
|
|
# Inside the SQL Client container
|
|
kubectl exec -it {{ .Values.sqlClient.name }} -n {{ include "flink-sql-gateway.namespace" . }} -- bash
|
|
|
|
# View available scripts
|
|
ls /opt/sql-scripts/
|
|
|
|
# Execute SQL file with remote cluster config
|
|
/opt/flink/bin/sql-client.sh gateway \
|
|
--endpoint http://{{ .Values.sqlGateway.name }}:{{ .Values.sqlGateway.port }} \
|
|
-Dexecution.target=remote \
|
|
-Drest.address={{ .Values.sessionCluster.name }}-rest \
|
|
-Drest.port=8081 \
|
|
-f /opt/sql-scripts/01-create-tables.sql
|
|
```
|
|
|
|
## Test Data
|
|
Send JSON messages to your input source:
|
|
```json
|
|
{"id": "msg001", "message": "Hello World", "timestamp_field": "2024-12-10T10:00:00.000Z"}
|
|
```
|
|
{{- end }} |