

在仔細考慮之後，我們決定停止 Amazon Kinesis Data Analytics for SQL 應用程式：

1. 從 **2025 年 9 月 1 日起，**我們不會為 Amazon Kinesis Data Analytics for SQL 應用程式提供任何錯誤修正，因為考慮到即將終止，我們將對其提供有限的支援。

2. 從 **2025 年 10 月 15 日起，**您將無法建立新的 Kinesis Data Analytics for SQL 應用程式。

3. 我們將自 **2026 年 1 月 27** 日起刪除您的應用程式。您將無法啟動或操作 Amazon Kinesis Data Analytics for SQL 應用程式。從那時起，Amazon Kinesis Data Analytics for SQL 將不再提供支援。如需詳細資訊，請參閱[Amazon Kinesis Data Analytics for SQL 應用程式終止](discontinuation.md)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建立 Lambda 函數以進行預處理
<a name="lambda-preprocessing-functions"></a>

將記錄擷取至應用程式時，您的 Amazon Kinesis Data Analytics 應用程式可以使用 Lambda 函數來預處理記錄。Kinesis Data Analytics 會在主控台上提供下列範本，作為預處理資料的起點。

**Topics**
+ [在 Node.js 中建立預處理 Lambda 函數](#lambda-preprocessing-functions-nodejs)
+ [在 Python 中建立預處理 Lambda 函數](#lambda-preprocessing-functions-python)
+ [在 Java 中建立預處理 Lambda 函數](#lambda-preprocessing-functions-java)
+ [在 .NET 中建立預處理 Lambda 函數](#lambda-preprocessing-functions-net)

## 在 Node.js 中建立預處理 Lambda 函數
<a name="lambda-preprocessing-functions-nodejs"></a>

Kinesis Data Analytics 主控台提供了下列在 Node.js 中建立預處理 Lambda 函數的範本：


| Lambda 藍圖 | 語言與版本 | Description | 
| --- | --- | --- | 
| 一般 Kinesis Data Analytics 輸入處理  | Node.js 6.10 |  Kinesis Data Analytics 記錄預處理器，可接收 JSON 或 CSV 記錄做為輸入，然後傳回處理狀態。使用此處理器作為自訂轉換邏輯的起點。  | 
| 壓縮輸入處理 | Node.js 6.10 | Kinesis Data Analytics 記錄預處理器，可接收壓縮的 (GZIP 或 Deflate 壓縮) JSON 或 CSV 記錄做為輸入，然後傳回解壓縮的紀錄與處理狀態。 | 

## 在 Python 中建立預處理 Lambda 函數
<a name="lambda-preprocessing-functions-python"></a>

主控台提供在 Python 中建立預處理 Lambda 函數的下列範本：


| Lambda 藍圖 | 語言與版本 | Description | 
| --- | --- | --- | 
| 一般 Kinesis Analytics 輸入處理  | Python 2.7 |  Kinesis Data Analytics 記錄預處理器，可接收 JSON 或 CSV 記錄做為輸入，然後傳回處理狀態。使用此處理器作為自訂轉換邏輯的起點。  | 
| KPL 輸入處理 | Python 2.7 | 接收 Kinesis 生產者程式庫 (KPL) 的 Kinesis Data Analytics 記錄處理器，彙總 JSON 或 CSV 記錄作為輸入，並傳回具有處理狀態的分解記錄。 | 

## 在 Java 中建立預處理 Lambda 函數
<a name="lambda-preprocessing-functions-java"></a>

如要在 Java 中建立預處理紀錄的 Lambda 函數，請使用 [Java 事件](https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events)類別。

下列程式碼會示範使用 Java，且可預處理紀錄的範例 Lambda 函數：

```
public class LambdaFunctionHandler implements
        RequestHandler<KinesisAnalyticsStreamsInputPreprocessingEvent, KinesisAnalyticsInputPreprocessingResponse> {

    @Override
    public KinesisAnalyticsInputPreprocessingResponse handleRequest(
            KinesisAnalyticsStreamsInputPreprocessingEvent event, Context context) {
        context.getLogger().log("InvocatonId is : " + event.invocationId);
        context.getLogger().log("StreamArn is : " + event.streamArn);
        context.getLogger().log("ApplicationArn is : " + event.applicationArn);

        List<KinesisAnalyticsInputPreprocessingResponse.Record> records = new ArrayList<KinesisAnalyticsInputPreprocessingResponse.Record>();
        KinesisAnalyticsInputPreprocessingResponse response = new KinesisAnalyticsInputPreprocessingResponse(records);

        event.records.stream().forEach(record -> {
            context.getLogger().log("recordId is : " + record.recordId);
            context.getLogger().log("record aat is :" + record.kinesisStreamRecordMetadata.approximateArrivalTimestamp);
             // Add your record.data pre-processing logic here.                               
            // response.records.add(new Record(record.recordId, KinesisAnalyticsInputPreprocessingResult.Ok, <preprocessedrecordData>));
        });
        return response;
    }

}
```

## 在 .NET 中建立預處理 Lambda 函數
<a name="lambda-preprocessing-functions-net"></a>

如要在 .NET 中建立預處理紀錄的 Lambda 函數，請使用 [.NET 事件](https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisAnalyticsEvents)類別。

下列程式碼會示範使用 C\$1，且可預處理紀錄的範例 Lambda 函數：

```
public class Function
    {
        public KinesisAnalyticsInputPreprocessingResponse FunctionHandler(KinesisAnalyticsStreamsInputPreprocessingEvent evnt, ILambdaContext context)
        {
            context.Logger.LogLine($"InvocationId: {evnt.InvocationId}");
            context.Logger.LogLine($"StreamArn: {evnt.StreamArn}");
            context.Logger.LogLine($"ApplicationArn: {evnt.ApplicationArn}");

            var response = new KinesisAnalyticsInputPreprocessingResponse
            {
                Records = new List<KinesisAnalyticsInputPreprocessingResponse.Record>()
            };

            foreach (var record in evnt.Records)
            {
                context.Logger.LogLine($"\tRecordId: {record.RecordId}");
                context.Logger.LogLine($"\tShardId: {record.RecordMetadata.ShardId}");
                context.Logger.LogLine($"\tPartitionKey: {record.RecordMetadata.PartitionKey}");
                context.Logger.LogLine($"\tRecord ApproximateArrivalTime: {record.RecordMetadata.ApproximateArrivalTimestamp}");
                context.Logger.LogLine($"\tData: {record.DecodeData()}");

                // Add your record preprocessig logic here.

                var preprocessedRecord = new KinesisAnalyticsInputPreprocessingResponse.Record
                {
                    RecordId = record.RecordId,
                    Result = KinesisAnalyticsInputPreprocessingResponse.OK
                };
                preprocessedRecord.EncodeData(record.DecodeData().ToUpperInvariant());
                response.Records.Add(preprocessedRecord);
            }
            return response;
        }
    }
```

如需在 .NET 中建立用於預處理和目的地的 Lambda 函數詳細資訊，請參閱 [https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisAnalyticsEvents](https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisAnalyticsEvents)。