Azure SQL Edge에서 데이터 스트리밍 작업 만들기

Important

Azure SQL Edge는 더 이상 ARM64 플랫폼을 지원하지 않습니다.

이 문서에서는 Azure SQL Edge에서 T-SQL 스트리밍 작업을 만드는 방법을 설명합니다. 외부 스트리밍 입력 및 출력 개체를 만든 다음 스트리밍 작업을 만드는 과정의 일부로 스트리밍 작업 쿼리를 정의합니다.

외부 스트림 입력 및 출력 개체 구성

T-SQL 스트리밍은 SQL Server의 외부 데이터 원본 기능을 사용하여 스트리밍 작업의 외부 스트림 입력 및 출력과 연결된 데이터 원본을 정의합니다. 외부 스트림 입력 또는 출력 개체를 만들려면 다음 T-SQL 명령이 필요합니다.

또한 Azure SQL Edge, SQL Server 또는 Azure SQL Database가 출력 스트리밍으로 사용되는 경우 CREATE DATABASE SCOPED CREDENTIAL(Transact-SQL)이 필요합니다. 이 T-SQL 명령은 데이터베이스에 액세스하기 위한 자격 증명을 정의합니다.

지원되는 입력 및 출력 스트림 데이터 원본

현재 Azure SQL Edge는 스트림 입력 및 출력으로 다음 데이터 원본만 지원합니다.

데이터 원본 유형 입력 출력 설명
Azure IoT Edge hub Y Y 스트리밍 데이터를 읽고 Azure IoT Edge Hub에 쓰기 위한 데이터 원본입니다. 자세한 내용은 IoT Edge Hub를 참조하세요.
SQL 데이터베이스 N Y SQL Database에 스트리밍 데이터를 쓰는 데이터 원본 연결입니다. 데이터베이스는 Azure SQL Edge의 로컬 데이터베이스이거나, SQL Server 또는 Azure SQL Database의 원격 데이터베이스일 수 있습니다.
Kafka Y N Kafka 토픽에서 스트리밍 데이터를 읽는 데이터 원본입니다.

예제: Azure IoT Edge Hub에 대한 외부 스트림 입력/출력 개체 만들기

다음 예제에서는 Azure IoT Edge 허브에 대한 외부 스트리밍 개체를 만듭니다. Azure IoT Edge Hub에 대한 외부 스트림 입력/출력 데이터 원본을 만들려면 읽는/쓰는 데이터의 레이아웃을 외부 파일 형식부터 만들어야 합니다.

  1. JSON 형식의 외부 파일 형식을 만듭니다.

    CREATE EXTERNAL FILE format InputFileFormat
    WITH (FORMAT_TYPE = JSON);
    GO
    
  2. Azure IoT Edge 허브에 대한 외부 데이터 원본을 만듭니다. 다음 T-SQL 스크립트는 Azure SQL Edge와 동일한 Docker 호스트에서 실행되는 IoT Edge 허브에 대한 데이터 원본 연결을 만듭니다.

    CREATE EXTERNAL DATA SOURCE EdgeHubInput
    WITH (LOCATION = 'edgehub://');
    GO
    
  3. Azure IoT Edge 허브에 대한 외부 스트리밍 개체를 만듭니다. 다음 T-SQL 스크립트는 IoT Edge 허브에 대한 스트리밍 개체를 만듭니다. IoT Edge 허브 스트림 개체의 경우 LOCATION 매개 변수는 읽거나 쓰는 IoT Edge 허브 토픽/채널의 이름입니다.

    CREATE EXTERNAL STREAM MyTempSensors
    WITH (
         DATA_SOURCE = EdgeHubInput,
         FILE_FORMAT = InputFileFormat,
         LOCATION = N'TemperatureSensors',
         INPUT_OPTIONS = N'',
         OUTPUT_OPTIONS = N''
    );
    GO
    

예제: 외부 스트림 개체 Azure SQL Database 만들기

다음 예제에서는 Azure SQL Edge의 로컬 데이터베이스에 대한 외부 스트리밍 개체를 만듭니다.

  1. 데이터베이스에 마스터 키를 만듭니다. 이 키는 자격 증명 비밀을 암호화하는 데 필요합니다.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<<Strong_Password_For_Master_Key_Encryption>>';
    
  2. SQL Server 원본에 액세스하기 위한 데이터베이스 범위 자격 증명을 만듭니다. 다음 예제에서는 IDENTITY = 'username' 및 SECRET = 'password'를 사용하여 외부 데이터 원본에 대한 자격 증명을 만듭니다.

    CREATE DATABASE SCOPED CREDENTIAL SQLCredential
    WITH IDENTITY = '<SQL_Login>', SECRET = '<SQL_Login_PASSWORD>';
    GO
    
  3. CREATE EXTERNAL DATA SOURCE를 사용하여 외부 데이터 원본을 만듭니다. 다음 예제를 참조하세요.

    • LocalSQLOutput이라는 외부 데이터 원본을 만듭니다.
    • 외부 데이터 원본(LOCATION = '<vendor>://<server>[:<port>]')을 확인합니다. 예제에서는 Azure SQL Edge의 로컬 인스턴스를 가리킵니다.
    • 이전에 만든 자격 증명을 사용합니다.
    CREATE EXTERNAL DATA SOURCE LocalSQLOutput
    WITH (
         LOCATION = 'sqlserver://tcp:.,1433',
         CREDENTIAL = SQLCredential
    );
    GO
    
  4. 외부 스트림 개체를 만듭니다. 다음 예제에서는 dbo MySQLDatabase 데이터베이스의 dbo.TemperatureMeasurements 테이블을 가리키는 외부 스트림 개체를 만듭니다.

    CREATE EXTERNAL STREAM TemperatureMeasurements
    WITH
    (
        DATA_SOURCE = LocalSQLOutput,
        LOCATION = N'MySQLDatabase.dbo.TemperatureMeasurements',
        INPUT_OPTIONS = N'',
        OUTPUT_OPTIONS = N''
    );
    

예제: 외부 스트림 개체 Kafka 만들기

다음 예제에서는 Azure SQL Edge의 로컬 데이터베이스에 대한 외부 스트리밍 개체를 만듭니다. 이 예제에서는 Kafka 서버가 익명 액세스를 위해 구성되어 있다고 가정합니다.

  1. CREATE EXTERNAL DATA SOURCE를 사용하여 외부 데이터 원본을 만듭니다. 다음 예제를 참조하세요.

    CREATE EXTERNAL DATA SOURCE [KafkaInput]
    WITH (LOCATION = N'kafka://<kafka_bootstrap_server_name_ip>:<port_number>');
    GO
    
  2. Kafka 입력에 대한 외부 파일 형식을 만듭니다. 다음 예제에서는 GZipped 압축을 사용하여 JSON 파일 형식을 만들었습니다.

    CREATE EXTERNAL FILE FORMAT JsonGzipped
    WITH (
         FORMAT_TYPE = JSON,
         DATA_COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec'
    );
    GO
    
  3. 외부 스트림 개체를 만듭니다. 다음 예제에서는 Kafka 항목 TemperatureMeasurement를 가리키는 외부 스트리밍 개체를 만듭니다.

    CREATE EXTERNAL STREAM TemperatureMeasurement
    WITH
    (
        DATA_SOURCE = KafkaInput,
        FILE_FORMAT = JsonGzipped,
        LOCATION = 'TemperatureMeasurement',
        INPUT_OPTIONS = 'PARTITIONS: 10'
    );
    GO
    

스트리밍 작업 및 스트리밍 쿼리 만들기

스트리밍 쿼리를 정의하고 스트리밍 작업을 만들려면 sys.sp_create_streaming_job 시스템 저장 프로시저를 사용합니다. sp_create_streaming_job 저장 프로시저는 다음 매개 변수를 사용합니다.

  • @job_name: 스트리밍 작업의 이름입니다. 스트리밍 작업 이름은 인스턴스 전체에서 고유합니다.
  • @statement: Stream Analytics 쿼리 언어 기반의 스트리밍 쿼리 명령문입니다.

다음 예제에서는 하나의 스트리밍 쿼리로 간단한 스트리밍 작업을 만듭니다. 이 쿼리는 IoT Edge Hub에서 입력을 읽고 데이터베이스의 dbo.TemperatureMeasurements에 씁니다.

EXEC sys.sp_create_streaming_job @name = N'StreamingJob1',
    @statement = N'Select * INTO TemperatureMeasurements from MyEdgeHubInput'

다음 예제에서는 여러 쿼리를 통해 더 복잡한 스트리밍 작업을 만듭니다. 이러한 쿼리에는 내장된 AnomalyDetection_ChangePoint 함수를 사용하여 온도 데이터의 이상을 식별하는 쿼리가 포함됩니다.

EXEC sys.sp_create_streaming_job @name = N'StreamingJob2',
    @statement = N'
        SELECT *
        INTO TemperatureMeasurements1
        FROM MyEdgeHubInput1

        SELECT *
        INTO TemperatureMeasurements2
        FROM MyEdgeHubInput2

        SELECT *
        INTO TemperatureMeasurements3
        FROM MyEdgeHubInput3

        SELECT timestamp AS [Time],
            [Temperature] AS [Temperature],
            GetRecordPropertyValue(AnomalyDetection_ChangePoint(Temperature, 80, 1200) OVER (LIMIT DURATION(minute, 20)), '' Score '') AS ChangePointScore,
            GetRecordPropertyValue(AnomalyDetection_ChangePoint(Temperature, 80, 1200) OVER (LIMIT DURATION(minute, 20)), '' IsAnomaly '') AS IsChangePointAnomaly
        INTO TemperatureAnomalies
        FROM MyEdgeHubInput2;
';
GO

스트리밍 작업 시작, 중지, 삭제 및 모니터링

Azure SQL Edge에서 스트리밍 작업을 시작하려면 sys.sp_start_streaming_job 저장 프로시저를 실행합니다. 저장 프로시저에서 입력과 동일한 스트리밍 작업을 시작해야 합니다.

EXEC sys.sp_start_streaming_job @name = N'StreamingJob1';
GO

스트리밍 작업을 중지하려면 sys.sp_stop_streaming_job 저장 프로시저를 실행합니다. 저장 프로시저는 중지할 스트리밍 작업의 이름을 입력으로 요구합니다.

EXEC sys.sp_stop_streaming_job @name = N'StreamingJob1';
GO

스트리밍 작업을 삭제하려면 sys.sp_drop_streaming_job 저장 프로시저를 실행합니다. 저장 프로시저는 삭제할 스트리밍 작업의 이름을 입력으로 요구합니다.

EXEC sys.sp_drop_streaming_job @name = N'StreamingJob1';
GO

스트리밍 작업의 현재 상태를 가져오려면 sys.sp_get_streaming_job 저장 프로시저를 실행합니다. 저장 프로시저는 삭제할 스트리밍 작업의 이름을 입력으로 요구합니다. 스트리밍 작업의 이름 및 현재 상태를 출력합니다.

EXEC sys.sp_get_streaming_job @name = N'StreamingJob1'
WITH RESULT SETS (
        (
            name NVARCHAR(256),
            status NVARCHAR(256),
            error NVARCHAR(256)
        )
    );
GO

스트리밍 작업의 상태는 다음 중 하나입니다.

상태 설명
Created 스트리밍 작업이 만들어졌지만 아직 시작되지 않았습니다.
시작 중 스트리밍 작업이 시작 단계에 있습니다.
유휴 상태 스트리밍 작업이 실행 중이지만 처리할 입력이 없습니다.
처리 스트리밍 작업이 실행 중이며 입력을 처리하고 있습니다. 이 상태는 스트리밍 작업이 정상임을 나타냅니다.
성능 저하됨 스트리밍 작업이 실행 중이지만 입력 처리 중에 치명적이지 않은 오류가 발생했습니다. 입력 작업은 계속 실행되지만 오류가 발생한 입력은 삭제됩니다.
중지됨 스트리밍 작업이 중지되었습니다.
실패함 스트림 작업이 실패했습니다. 일반적으로 처리하는 동안 치명적인 오류가 발생했음을 나타냅니다.

참고 항목

스트리밍 작업은 비동기식으로 실행되기 때문에 런타임 시 작업에 오류가 발생할 수 있습니다. 스트리밍 작업 실패 문제를 해결하려면 sys.sp_get_streaming_job 저장 프로시저를 사용하거나 스트리밍 작업의 오류 세부 정보를 제공할 수 있는 Azure SQL Edge 컨테이너의 docker 로그를 검토합니다.

다음 단계