Amazon Keyspaces의 클라이언트 측 타임스탬프 사용 - Amazon Keyspaces(Apache Cassandra용)

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Keyspaces의 클라이언트 측 타임스탬프 사용

Amazon Keyspaces(Apache Cassandra용) 콘솔, Cassandra 쿼리 언어(CQL), AWS SDK, AWS Command Line Interface(AWS CLI)를 사용하여 클라이언트 측 타임스탬프를 활성화할 수 있습니다. 이 섹션에서는 새 테이블과 기존 테이블에서 클라이언트 측 타임스탬프를 활성화하는 방법과 쿼리에 클라이언트 측 타임스탬프를 사용하는 방법에 대한 예시를 알아봅니다. API에 대한 자세한 내용은 Amazon Keyspaces API 참조를 참조하세요.

중요

클라이언트 측 타임스탬프는 비활성화할 수 없습니다. 클라이언트 측 타임스탬프를 활성화하고 나면 다시 변경할 수 있습니다. Amazon Keyspaces는 테이블을 삭제하지 않고 타임스탬프를 비활성화하는 옵션을 제공하지 않습니다.

클라이언트 측 타임스탬프가 활성화된 새 테이블 생성(콘솔)

다음 단계에 따라 Amazon Keyspaces 콘솔을 통해 클라이언트 측 타임스탬프가 활성화된 새 테이블을 생성합니다.

클라이언트 측 타임스탬프가 있는 새 테이블 만들기(콘솔)
  1. AWS Management Console에 로그인하고 Amazon Keyspaces 콘솔(https://console.aws.amazon.com/msk/home)을 엽니다.

  2. 탐색 창에서 테이블을 선택한 다음 테이블 생성을 선택합니다.

  3. 테이블 세부 정보 섹션의 테이블 생성 페이지에서 키스페이스를 선택하고 새 테이블의 이름을 입력합니다.

  4. 스키마 섹션에서 테이블의 스키마를 생성합니다.

  5. 테이블 설정 섹션에서 설정 사용자 지정을 선택합니다.

  6. 클라이언트 측 타임스탬프로 이동합니다.

    테이블의 클라이언트 측 타임스탬프를 활성화하려면 클라이언트 측 타임스탬프 활성화를 선택합니다.

  7. 테이블 생성을 선택합니다. 클라이언트 측 타임스탬프가 활성화된 상태로 테이블이 생성됩니다.

기존 테이블의 클라이언트 측 타임스탬프 활성화(콘솔)

다음 단계에 따라 Amazon Keyspaces AWS Management Console를 사용하여 기존 테이블의 클라이언트 측 타임스탬프를 활성화합니다.

기존 테이블의 클라이언트 측 타임스탬프 활성화(콘솔)
  1. AWS Management Console에 로그인하고 Amazon Keyspaces 콘솔(https://console.aws.amazon.com/msk/home)을 엽니다.

  2. 업데이트할 테이블을 선택한 다음 추가 설정 탭을 선택합니다.

  3. 추가 설정 탭에서 클라이언트 측 타임스탬프 수정으로 이동한 다음 클라이언트 측 타임스탬프 활성화를 선택합니다.

  4. 변경 내용 저장을 선택하여 표 설정을 변경합니다.

클라이언트 측 타임스탬프가 설정된 새 테이블 생성(CQL)

새 테이블을 만들 때 클라이언트 측 타임스탬프를 활성화하려면 다음 CQL 문을 사용할 수 있습니다.

CREATE TABLE my_table ( userid uuid, time timeuuid, subject text, body text, user inet, PRIMARY KEY (userid, time) ) WITH CUSTOM_PROPERTIES = {'client_side_timestamps': {'status': 'enabled'}};

새 테이블의 클라이언트 측 타임스탬프 설정을 확인하려면 다음 예시와 같이 SELECT 문을 사용하여 custom_properties를 검토합니다.

SELECT custom_properties from system_schema_mcs.tables where keyspace_name = 'my_keyspace' and table_name = 'my_table';

이 문의 출력에는 클라이언트 측 타임스탬프의 상태가 표시됩니다.

'client_side_timestamps': {'status': 'enabled'}

ALTER TABLE(CQL)를 사용하여 기존 테이블의 클라이언트 측 타임스탬프 활성화

기존 테이블의 클라이언트 측 타임스탬프를 활성화하려면 다음 CQL 문을 사용할 수 있습니다.

ALTER TABLE my_table WITH custom_properties = {'client_side_timestamps': {'status': 'enabled'}};;

새 테이블의 클라이언트 측 타임스탬프 설정을 확인하려면 다음 예시와 같이 SELECT 문을 사용하여 custom_properties를 검토합니다.

SELECT custom_properties from system_schema_mcs.tables where keyspace_name = 'my_keyspace' and table_name = 'my_table';

이 문의 출력에는 클라이언트 측 타임스탬프의 상태가 표시됩니다.

'client_side_timestamps': {'status': 'enabled'}

클라이언트 측 타임스탬프가 활성화된 새 테이블 생성(CLI)

새 테이블을 만들 때 클라이언트 측 타임스탬프를 활성화하려면 다음 CLI 문을 사용할 수 있습니다.

./aws keyspaces create-table \ --keyspace-name my_keyspace \ --table-name my_table \ --client-side-timestamps 'status=ENABLED' \ --schema-definition 'allColumns=[{name=id,type=int},{name=date,type=timestamp},{name=name,type=text}],partitionKeys=[{name=id}]'

새 테이블에 클라이언트 측 타임스탬프가 활성화되어 있는지 확인하려면 다음 코드를 실행합니다.

./aws keyspaces get-table \ --keyspace-name my_keyspace \ --table-name my_table

결과가 다음 예제와 비슷해야 합니다.

{ "keyspaceName": "my_keyspace", "tableName": "my_table", "resourceArn": "arn:aws:cassandra:us-east-2:555555555555:/keyspace/my_keyspace/table/my_table", "creationTimestamp": 1662681206.032, "status": "ACTIVE", "schemaDefinition": { "allColumns": [ { "name": "id", "type": "int" }, { "name": "date", "type": "timestamp" }, { "name": "name", "type": "text" } ], "partitionKeys": [ { "name": "id" } ], "clusteringKeys": [], "staticColumns": [] }, "capacitySpecification": { "throughputMode": "PAY_PER_REQUEST", "lastUpdateToPayPerRequestTimestamp": 1662681206.032 }, "encryptionSpecification": { "type": "AWS_OWNED_KMS_KEY" }, "pointInTimeRecovery": { "status": "DISABLED" }, "clientSideTimestamps": { "status": "ENABLED" }, "ttl": { "status": "ENABLED" }, "defaultTimeToLive": 0, "comment": { "message": "" } }

기존 테이블의 클라이언트 측 타임스탬프 활성화(CLI)

CLI를 사용하는 기존 테이블의 클라이언트 측 타임스탬프를 활성화하려면 다음 코드를 사용할 수 있습니다.

./aws keyspaces update-table \ --keyspace-name my_keyspace \ --table-name my_table \ --client-side-timestamps 'status=ENABLED'

테이블에 대해 클라이언트 측 타임스탬프가 활성화되어 있는지 확인하려면 다음 코드를 실행합니다.

./aws keyspaces get-table \ --keyspace-name my_keyspace \ --table-name my_table

결과가 다음 예제와 비슷해야 합니다.

{ "keyspaceName": "my_keyspace", "tableName": "my_table", "resourceArn": "arn:aws:cassandra:us-east-2:555555555555:/keyspace/my_keyspace/table/my_table", "creationTimestamp": 1662681312.906, "status": "ACTIVE", "schemaDefinition": { "allColumns": [ { "name": "id", "type": "int" }, { "name": "date", "type": "timestamp" }, { "name": "name", "type": "text" } ], "partitionKeys": [ { "name": "id" } ], "clusteringKeys": [], "staticColumns": [] }, "capacitySpecification": { "throughputMode": "PAY_PER_REQUEST", "lastUpdateToPayPerRequestTimestamp": 1662681312.906 }, "encryptionSpecification": { "type": "AWS_OWNED_KMS_KEY" }, "pointInTimeRecovery": { "status": "DISABLED" }, "clientSideTimestamps": { "status": "ENABLED" }, "ttl": { "status": "ENABLED" }, "defaultTimeToLive": 0, "comment": { "message": "" } }

DML(데이터 조작 언어) 문에서 클라이언트 측 타임스탬프 사용

클라이언트 측 타임스탬프를 활성화하면 INSERT, UPDATE, DELETE 문에 타임스탬프를 USING TIMESTAMP 절과 함께 전달할 수 있습니다. 타임스탬프 값은 epoch로 알려진 표준 기준 시간인 1970년 1월 1일 00:00:00(그리니치 표준시 기준) 이후 경과된 시간을 마이크로초 단위로 나타내는 bigint 값입니다. 클라이언트가 제공하는 타임스탬프는 현재 벽시계 시간으로부터 과거 2일과 미래의 5분 사이 범위에 속해야 합니다. Amazon Keyspaces는 데이터 수명 기간 동안 타임스탬프 메타데이터를 보관합니다. WRITETIME 함수를 사용하여 지난 몇 년 동안 발생한 타임스탬프를 조회할 수 있습니다. CQL 구문에 대한 자세한 내용은 Amazon Keyspaces의 DML 문(데이터 조작 언어) 섹션을 참조하세요.

다음 CQL 문은 타임스탬프를 update_parameter로 사용하는 방법의 예제입니다.

INSERT INTO catalog.book_awards (year, award, rank, category, book_title, author, publisher) VALUES (2022, 'Wolf', 4, 'Non-Fiction', 'Science Update', 'Ana Carolina Silva', 'SomePublisher') USING TIMESTAMP 1669069624;

CQL 쿼리에 타임스탬프를 지정하지 않는 경우 Amazon Keyspaces는 클라이언트 드라이버가 전달한 타임스탬프를 사용합니다. 클라이언트 드라이버가 타임스탬프를 제공하지 않는 경우 Amazon Keyspaces는 쓰기 작업에 서버 측 타임스탬프를 할당합니다.

특정 열에 저장된 타임스탬프 값을 보려면 다음 예시와 같이 SELECT 문에 WRITETIME 함수를 사용하면 됩니다.

SELECT year, award, rank, category, book_title, author, publisher, WRITETIME(year), WRITETIME(award), WRITETIME(rank), WRITETIME(category), WRITETIME(book_title), WRITETIME(author), WRITETIME(publisher) from catalog.book_awards;