클라우드의 파일에서 데이터 로드

PL/SQL 패키지 DBMS_CLOUD은 클라우드의 파일에서 Autonomous Database on Dedicated Exadata Infrastructure에 생성된 테이블로 데이터를 로드하는 기능을 지원합니다.

DBMS_CLOUD에서 제공하는 다음 PL/SQL 프로시저를 사용하여 다른 파일 형식의 데이터를 로드할 수 있습니다.
  • DBMS_CLOUD.COPY_DATA 프로시저를 사용하는 클라우드의 텍스트 파일
  • DBMS_CLOUD.COPY_TEXT 프로시저를 사용하는 클라우드의 JSON 파일
파일에서 데이터를 로드하기 전에 다음을 확인합니다.
  • 소스 파일은 클라이언트 컴퓨터에서 로컬 파일로 사용하거나 Oracle Cloud Infrastructure Object Storage와 같은 클라우드 기반 객체 저장소에 업로드할 수 있으며 데이터 로드를 시도하는 데이터베이스 사용자가 액세스할 수 있습니다.
  • 클라우드 객체 스토리지 인증서는 DBMS_CLOUD.CREATE_CREDENTIAL 프로시저를 사용하여 저장됩니다. 자세한 내용은 인증서 생성을 참조하십시오.

DBMS_CLOUD 패키지는 Oracle Cloud Infrastructure Object Storage, Oracle Cloud Infrastructure Object Storage Classic, Azure Blob StorageAmazon S3 클라우드 서비스의 파일에서 로드를 지원합니다.

인증서 생성

DBMS_CLOUD.CREATE_CREDENTIAL 프로시저를 사용하여 클라우드 오브젝트 스토리지 인증서를 저장하는 방법을 알아봅니다.

SQL*Plus, SQL Developer 또는 Database Actions(웹 기반 SQL Developer 툴)와 같은 데이터베이스 툴을 사용하여 DBMS_CLOUD.CREATE_CREDENTIAL 프로시저를 실행합니다. 예:
BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'DEF_CRED_NAME',
    username => 'adb_user@oracle.com',
    password => 'password'
  );
END;
/

usernamepassword에 제공하는 값은 사용 중인 클라우드 객체 스토리지 서비스에 따라 달라집니다.

  • Oracle Cloud Infrastructure Object Storage: username는 Oracle Cloud Infrastructure 사용자 이름이고 password는 Oracle Cloud Infrastructure 인증 토큰입니다. 인증 토큰 작업을 참조하십시오.

  • Oracle Cloud Infrastructure Object Storage Classic: username은 Oracle Cloud Infrastructure Classic 사용자 이름이며, password은 Oracle Cloud Infrastructure Classic 비밀번호입니다.

이 작업은 인증서를 암호화된 형식으로 데이터베이스에 저장합니다. 인증서 이름에 대해 원하는 이름을 사용할 수 있습니다. 이 단계는 객체 저장소 인증서가 변경되지 않는 한 한 한 번만 필요합니다. 인증서를 저장한 후에는 모든 데이터 로드에 대해 동일한 인증서 이름을 사용할 수 있습니다.

텍스트 파일에서 데이터 로드

DBMS_CLOUD.COPY_DATA 절차를 사용하여 클라우드의 텍스트 파일에서 Autonomous Database로 데이터를 로드하는 방법을 알아봅니다.

이 예의 소스 파일 channels.txt에는 다음 데이터가 있습니다.

S,Direct Sales,Direct
T,Tele Sales,Direct
C,Catalog,Indirect
I,Internet,Indirect
P,Partners,Others
  1. DBMS_CREDENTIAL.CREATE_CREDENTIAL 프로시저를 사용하여 클라우드 객체 스토리지 인증서를 저장합니다. 자세한 내용은 인증서 생성을 참조하십시오.
  2. 데이터를 포함할 테이블을 생성합니다. 예를 들면, 다음과 같습니다.
    CREATE TABLE CHANNELS
       (channel_id CHAR(1),
        channel_desc VARCHAR2(20),
        channel_class VARCHAR2(20)
       );
    /
  3. DBMS_CLOUD.COPY_DATA 프로시저를 사용하여 테이블로 데이터를 로드합니다. 예를 들면, 다음과 같습니다.
    BEGIN
     DBMS_CLOUD.COPY_DATA(
        table_name =>'CHANNELS',
        credential_name =>'DEF_CRED_NAME',
        file_uri_list =>'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/idthydc0kinr/mybucket/channels.txt',
        format => json_object('delimiter' value ',')
     );
    END;
    /
    

    다음과 같은 매개변수가 있습니다.

    • table_name: 대상 테이블의 이름입니다.

    • credential_name: 이전 단계에서 생성된 인증서의 이름입니다.

    • file_uri_list: 로드할 소스 파일의 콤마로 구분된 목록입니다.

      이 예에서 file_uri_listus-phoenix-1 영역의 mybucket 버킷에 있는 channels.txt 파일을 지정하는 Oracle Cloud Infrastructure Swift URI입니다. idthydc0kinr는 버킷이 상주하는 오브젝트 스토리지 네임스페이스입니다. 지원되는 URI 형식에 대한 자세한 내용은 클라우드 오브젝트 스토리지 URI 형식을 참조하십시오.

    • format: 소스 파일의 형식을 설명하기 위해 지정하는 옵션을 정의합니다. 지정할 수 있는 형식 옵션에 대한 자세한 내용은 형식 매개변수를 참조하십시오.

    자세한 내용은 COPY_DATA Procedure를 참조하십시오.

구분된 문서의 JSON 파일을 모음으로 로드

DBMS_CLOUD.COPY_DATA 절차를 사용하여 구분된 문서의 JSON 파일을 Autonomous Database의 모음으로 로드하는 방법을 알아봅니다.

이 예에서는 행으로 구분된 파일에서 JSON 값을 로드하고 JSON 파일 myCollection.json를 사용합니다. 각 행의 각 값은 Autonomous Database의 모음에 단일 문서로 로드됩니다.

다음은 이러한 파일의 예입니다. 행당 하나의 객체가 있는 세 개의 행이 있습니다. 각 객체는 별도의 JSON 문서로 로드됩니다.

{ "name" : "apple", "count": 20 }
{ "name" : "orange", "count": 42 }
{ "name" : "pear", "count": 10 }
절차:
  1. DBMS_CLOUD.CREATE_CREDENTIAL 프로시저를 사용하여 클라우드 객체 스토리지 인증서를 저장합니다. 자세한 내용은 인증서 생성을 참조하십시오.
  2. DBMS_CLOUD.COPY_DATA 프로시저를 사용하여 컬렉션에 데이터를 로드합니다. 예를 들면, 다음과 같습니다.
    BEGIN 
      DBMS_CLOUD.COPY_COLLECTION(
        collection_name =>'fruit',
        credential_name =>'DEF_CRED_NAME',
        file_uri_list =>'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/fruit_bucket/o/myCollection.json',
        format => json_object('recorddelimiter' value '''\n''')
     );
    END;
    /
    

    다음과 같은 매개변수가 있습니다.

    • collection_name: 대상 모음의 이름입니다.

    • credential_name: 이전 단계에서 생성된 인증서의 이름입니다.

    • file_uri_list: 로드할 소스 파일의 콤마로 구분된 목록입니다.

      이 예에서 file_uri_listus-phoenix-1 영역의 mybucket 버킷에 있는 myCollection.json 파일을 지정하는 Oracle Cloud Infrastructure Swift URI입니다. 지원되는 URI 형식에 대한 자세한 내용은 클라우드 오브젝트 스토리지 URI 형식을 참조하십시오.

    • format: 소스 파일의 형식을 설명하기 위해 지정하는 옵션을 정의합니다. characterset, compression, ignoreblanklines, jsonpath, maxdocsize, recorddelimiter, rejectlimit, unpackarray 형식 옵션은 JSON 데이터를 로드하는 데 지원됩니다. 다른 형식을 지정하면 오류가 발생합니다. 지정할 수 있는 형식 옵션에 대한 자세한 내용은 형식 매개변수를 참조하십시오.

    자세한 내용은 COPY_COLLECTION Procedure를 참조하십시오.

모음에 JSON 문서 배열 로드

DBMS_CLOUD.COPY_COLLECTION 절차를 사용하여 Autonomous Database의 모음에 JSON 문서 배열을 로드하는 방법을 알아봅니다.

이 예에서는 JSON 파일 fruit_array.json를 사용합니다. 다음은 fruit_array.json 파일의 내용을 보여줍니다.

[{"name" : "apple", "count": 20 },
 {"name" : "orange", "count": 42 },
 {"name" : "pear", "count": 10 }]
절차:
  1. DBMS_CLOUD.CREATE_CREDENTIAL 프로시저를 사용하여 클라우드 객체 스토리지 인증서를 저장합니다. 자세한 내용은 인증서 생성을 참조하십시오.
  2. DBMS_CLOUD.COPY_DATA 프로시저를 사용하여 컬렉션에 데이터를 로드합니다. 예를 들면, 다음과 같습니다.
    BEGIN 
      DBMS_CLOUD.COPY_COLLECTION(    
        collection_name => 'fruits',    
        credential_name => 'DEF_CRED_NAME',    
        file_uri_list => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/json/o/fruit_array.json',
        format => '{"recorddelimiter" : "0x''01''", "unpackarrays" : "TRUE", "maxdocsize" : "10240000"}'
      );
    END;
    /

    이 예에서는 전체 파일을 차지하는 단일 JSON 값을 로드합니다. 따라서 레코드 구분자를 지정할 필요가 없습니다. 레코드 구분자가 없음을 나타내려면 입력 파일에서 발생하지 않는 문자를 사용할 수 있습니다. 예를 들어, 이 문자는 JSON 텍스트에서 직접 발생하지 않으므로 "0x''01''" 값을 사용할 수 있습니다.

    형식 값에 대한 unpackarrays 매개변수를 TRUE로 설정하면 문서 배열이 전체 배열이 아닌 개별 문서로 로드됩니다. 그러나 배열 요소의 압축 풀기는 단일 레벨로 제한됩니다. 문서에 중첩된 배열이 있는 경우 해당 배열의 압축이 풀리지 않습니다.

    다음과 같은 매개변수가 있습니다.

    • collection_name: 대상 모음의 이름입니다.

    • credential_name: 이전 단계에서 생성된 인증서의 이름입니다.

    • file_uri_list: 로드할 소스 파일의 콤마로 구분된 목록입니다.

      이 예에서 file_uri_listus-phoenix-1 영역의 mybucket 버킷에 있는 myCollection.json 파일을 지정하는 Oracle Cloud Infrastructure Swift URI입니다. 지원되는 URI 형식에 대한 자세한 내용은 클라우드 오브젝트 스토리지 URI 형식을 참조하십시오.

    • format: 소스 파일의 형식을 설명하기 위해 지정하는 옵션을 정의합니다. characterset, compression, ignoreblanklines, jsonpath, maxdocsize, recorddelimiter, rejectlimit, unpackarray 형식 옵션은 JSON 데이터를 로드하는 데 지원됩니다. 다른 형식을 지정하면 오류가 발생합니다. 지정할 수 있는 형식 옵션에 대한 자세한 내용은 형식 매개변수를 참조하십시오.

    형식 옵션 unpackarrays를 사용하여 DBMS_CLOUD.COPY_COLLECTION를 사용하여 fruit_array.json를 로드하면 프로시저가 소스의 배열 값을 인식하게 됩니다. 따라서 데이터를 단일 문서로 로드하는 대신 기본적으로 데이터가 컬렉션 fruits에 로드되고 배열의 각 값은 단일 문서로 로드됩니다.

    자세한 내용은 COPY_COLLECTION Procedure를 참조하십시오.

기존 테이블에 JSON 데이터 복사

DBMS_CLOUD.COPY_DATA를 사용하여 클라우드의 JSON 데이터를 테이블로 로드합니다.

이 예제의 소스 파일은 JSON 데이터 파일입니다.

  1. DBMS_CLOUD.CREATE_CREDENTIAL 절차에 따라 객체 저장소 자격 증명을 저장합니다. 예를 들면, 다음과 같습니다.
    SET DEFINE OFF
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password'
      );
    END;
    /

    이 작업은 인증서를 암호화된 형식으로 데이터베이스에 저장합니다. 인증서 이름에 대해 원하는 이름을 사용할 수 있습니다. 이 단계는 객체 저장소 인증서가 변경되지 않는 한 한 한 번만 필요합니다. 인증서를 저장한 후에는 모든 데이터 로드에 대해 동일한 인증서 이름을 사용할 수 있습니다.

    매개변수에 대한 자세한 내용은 CREATE_CREDENTIAL Procedure를 참조하십시오.

  2. DBMS_CLOUD.COPY_DATA 프로시저를 사용하여 JSON 데이터를 기존 테이블로 로드합니다.

    예:

    CREATE TABLE WEATHER2
        (WEATHER_STATION_ID VARCHAR2(20),
         WEATHER_STATION_NAME VARCHAR2(50));
    / 
    
    BEGIN 
      DBMS_CLOUD.COPY_DATA(
          table_name      => 'WEATHER2',
          credential_name => 'DEF_CRED_NAME',
          file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/jsonfiles*',
          format          =>  JSON_OBJECT('type' value 'json', 'columnpath' value '["$.WEATHER_STATION_ID",
              "$.WEATHER_STATION_NAME"]')
        );
    END;
    / 
    

    다음과 같은 매개변수가 있습니다.

    • table_name: 대상 테이블의 이름입니다.

    • credential_name: 이전 단계에서 생성된 인증서의 이름입니다.

    • file_uri_list: 로드할 소스 파일의 콤마로 구분된 목록입니다. URI의 파일 이름에 와일드카드를 사용할 수 있습니다. 문자 "*"는 다중 문자에 대한 와일드카드로 사용할 수 있으며, 문자 "?"는 단일 문자에 대한 와일드카드로 사용할 수 있습니다.

    • format: JSON 데이터가 있는 DBMS_CLOUD.COPY_DATA의 경우 typejson입니다. 다른 형식 값을 지정하여 JSON 소스 파일의 형식을 설명하는 옵션을 정의합니다. 자세한 내용은 DBMS_CLOUD Package Format Options을 참조하십시오.

    이 예에서는 namespace-string가 Oracle Cloud Infrastructure 오브젝트 스토리지 네임스페이스이고 bucketname가 버킷 이름입니다. 자세한 내용은 Object Storage 네임스페이스 이해를 참조하십시오.

    매개변수에 대한 자세한 내용은 COPY_DATA Procedure를 참조하십시오.

데이터 로드 모니터링 및 문제 해결

PL/SQL 패키지 DBMS_CLOUD를 사용하여 수행된 모든 데이터 로드 작업은 dba_load_operationsuser_load_operations 테이블에 기록됩니다.

  • dba_load_operations: 모든 로드 작업을 보여줍니다.

  • user_load_operations: 스키마의 로드 작업을 보여줍니다.

이러한 테이블을 query하여 진행 중인 데이터 로드와 완료된 데이터 로드에 대한 정보를 확인합니다. 예를 들어, TYPE 열에 WHERE 절 술어가 있는 SELECT 문을 사용하면 COPY 유형의 로드 작업이 표시됩니다.


SELECT table_name, owner_name, type, status, start_time, update_time, logfile_table, badfile_table 
   FROM user_load_operations WHERE type = 'COPY';

TABLE_NAME OWNER_NAME  TYPE   STATUS     START_TIME                            UPDATE_TIME                          LOGFILE_TABLE   BADFILE_TABLE
---------- ----------- ------- ---------- ---------------------- --------------------- --------------- ------------- ------------- -------------
CHANNELS   SH          COPY   COMPLETED  04-MAR-21 07.38.30.522711000 AM GMT    04-MAR-21 07.38.30.522711000 AM GMT  COPY$1_LOG     COPY$1_BAD

LOGFILE_TABLE 열에는 로드 작업의 로그를 보기 위해 질의할 수 있는 테이블의 이름이 표시됩니다. 예를 들어, 다음 query는 로드 작업의 로그를 보여줍니다.

select * from COPY$21_LOG;

BADFILE_TABLE 열에는 로드 중 오류가 발생한 행을 보기 위해 질의할 수 있는 테이블의 이름이 표시됩니다. 예를 들어, 다음 query는 로드 작업에 대해 거부된 레코드를 보여줍니다.

select * from COPY$21_BAD;

로그에 표시된 오류 및 지정된 BADFILE_TABLE 테이블에 표시된 행에 따라 DBMS_CLOUD.COPY_DATA에 올바른 형식 옵션을 지정하여 오류를 수정할 수 있습니다.

주:

LOGFILE_TABLEBADFILE_TABLE 테이블은 각 로드 작업에 대해 2일 동안 저장된 후 자동으로 제거됩니다.

user_load_operations 테이블 지우기에 대한 자세한 내용은 DELETE_ALL_OPERATIONS Procedure를 참조하십시오.

확장 스칼라 값을 나타내는 텍스트 JSON 객체

네이티브 바이너리 JSON 데이터(OSON 형식)는 SQL 유형에 해당하며 JSON 표준에 속하지 않는 스칼라 유형(예: 날짜)을 추가하여 JSON 언어를 확장합니다. 또한 Oracle Database는 이러한 비표준 값을 포함하여 JSON 스칼라 값을 대표하는 텍스트 JSON 객체 사용을 지원합니다.

이러한 확장된 객체를 포함하는 텍스트 JSON 데이터에서 고유 이진 JSON 데이터를 생성할 때 해당(고유 이진) JSON 스칼라 값으로 선택적으로 바꾸기할 수 있습니다.

확장 객체의 예는 {"$numberDecimal":31}입니다. 비표준 유형 십진수의 JSON 스칼라 값을 나타내며, 이 값을 해석하면 고유 이진 형식의 십진수로 대체됩니다.

예를 들어, JSON 데이터 유형 생성자 JSON을 사용할 때 EXTENDED 키워드를 사용할 경우 텍스트 입력에서 인식된 확장 객체가 고유 이진 JSON 결과에서 해당 스칼라 값으로 바뀝니다. EXTENDED 키워드를 포함하지 않으면 이러한 대체가 발생하지 않습니다. 텍스트 확장 JSON 객체는 단순히 기본 이진 형식의 JSON 객체로 변환됩니다.

반대 방향에서 Oracle SQL 함수 json_serialize를 사용하여 이진 JSON 데이터를 텍스트 JSON 데이터(VARCHAR2, CLOB 또는 BLOB)로 직렬화하면 EXTENDED 키워드를 사용하여 (고유 이진) JSON 스칼라 값을 해당 텍스트 확장 JSON 객체로 바꿀 수 있습니다.

주:

사용하는 데이터베이스가 Oracle Autonomous Database인 경우 PL/SQL 프로시저 DBMS_CLOUD.copy_collection를 사용하여 Oracle NoSQL Database를 포함한 공통 NoSQL 데이터베이스에서 생성된 것과 같은 JSON 데이터 파일에서 JSON 문서 모음을 생성할 수 있습니다.

ejson를 프로시저의 type 매개변수 값으로 사용하는 경우 입력 파일에서 인식된 확장 JSON 객체가 결과 고유 이진 JSON 모음의 해당 스칼라 값으로 바뀝니다. 다른 방향에서는 json_serialize 함수를 EXTENDED 키워드와 함께 사용하여 스칼라 값을 결과 텍스트 JSON 데이터에서 확장된 JSON 객체로 바꿀 수 있습니다.

다음은 확장 객체에 대한 두 가지 주요 사용 사례입니다.

  • Exchange(import/export):

    • 확장 객체를 포함하는 기존 JSON 데이터(어딘가에서)를 수집합니다.

    • 데이터베이스 외부에서 사용할 수 있도록 기본 바이너리 JSON 데이터를 확장된 객체가 있는 텍스트 JSON 데이터로 직렬화합니다.

  • 네이티브 바이너리 JSON 데이터의 검사: 해당하는 확장된 객체를 확인하여 보유한 데이터를 확인합니다.

교환을 위해 Oracle NoSQL Database를 비롯한 공통 NoSQL 데이터베이스에서 생성된 파일에서 JSON 데이터를 수집하여 확장된 객체를 고유 이진 JSON 스칼라로 변환할 수 있습니다. 다른 방향에서는 고유 바이너리 JSON 데이터를 텍스트 데이터로 익스포트하여 Oracle 특정 스칼라 JSON 값을 해당 텍스트 확장 JSON 객체로 대체할 수 있습니다.

참고:

검사의 예로, 네이티브 JSON 데이터를 직렬화한 결과로 {"dob" : "2000-01-02T00:00:00"}와 같은 객체를 고려해 보십시오. "2000-01-02T00:00:00"는 날짜 유형의 고유 이진 값을 직렬화한 결과입니까, 아니면 고유 이진 값이 문자열일 뿐입니까? EXTENDED 키워드와 함께 json_serialize를 사용하면 알 수 있습니다.

확장 객체 필드를 스칼라 JSON 유형에 매핑하는 것은 일반적으로 다대일입니다. 여러 종류의 확장된 JSON 객체를 지정된 스칼라 값에 매핑할 수 있습니다. 예를 들어, 확장된 JSON 객체({"$numberDecimal":"31"}{"$numberLong:"31"})는 모두 JSON 언어 스칼라 유형 번호의 값(31)으로 변환되고, 항목 메소드(type())는 이러한 각 JSON 스칼라에 대해 "number"를 반환합니다.

Item 메서드 type()는 타겟 값의 JSON 언어 스칼라 유형을 JSON 문자열로 보고합니다. 일부 스칼라 값은 스칼라 유형이 동일하더라도 내부적으로 구분할 수 있습니다. 이를 통해 일반적으로 함수 json_serialize(키워드 EXTENDED 포함)가 원래 확장된 JSON 객체를 재구성할 수 있습니다. 이러한 스칼라 값은 다양한 SQL 유형을 사용하여 구현하거나 확장된 JSON 객체의 종류로 태그 지정하여 내부적으로 구별됩니다.

json_serialize가 원래 확장 JSON 객체를 재구성하는 경우 결과가 항상 원본과 텍스트로 동일하지는 않지만 항상 반대적으로 동등합니다. 예를 들어, 필드 값이 유형(문자열 및 숫자)에서 다르더라도 {"$numberDecimal":"31"}{"$numberDecimal":31}는 의미상 동일합니다. 동일한 내부 값으로 변환되며 각각은 $numberDecimal 확장 객체(동일한 태그)에서 파생되는 것으로 태그가 지정됩니다. 하지만 직렬화되면 둘 다에 대한 결과{"$numberDecimal":31}입니다. Oracle은 항상 필드 값에 가장 직접적으로 관련된 유형을 사용합니다. 이 경우 스칼라 유형 번호의 JSON 언어 값 31입니다.

표 -는 사용된 다양한 유형 간의 대응을 나타냅니다. (1) 입력으로 사용된 확장 객체 유형, (2) 항목 메소드 type()에 의해 보고된 유형, (3) 내부적으로 사용된 SQL 유형, (4) 함수 json_serialize에 의해 출력으로 사용된 표준 JSON 언어 유형 및 (5) 키워드 EXTENDED가 지정된 경우 json_serialize에 의해 출력된 확장 객체 유형에 매핑됩니다.

테이블 - 확장 JSON 객체 유형 관계

확장 객체 유형(입력) Oracle JSON 스칼라 유형(type()으로 보고됨) SQL 스칼라 유형 표준 JSON 스칼라 유형(출력) 확장 객체 유형(출력)
$numberDouble - JSON 숫자 값, 숫자를 나타내는 문자열 또는 다음 문자열 중 하나 포함: "Infinity", "-Infinity", "Inf", "-Inf", "Nan"각주 1 double BINARY_DOUBLE

숫자

$numberDouble 값, JSON 번호 또는 다음 문자열 중 하나 포함: "Inf", "-Inf", "Nan"각주 2
$numberDouble에 대한 값과 동일한 $numberFloat float BINARY_FLOAT

숫자

$numberDouble에 대한 값과 동일한 $numberFloat
$numberDouble에 대한 값과 동일한 $numberDecimal 숫자 NUMBER

숫자

$numberDouble에 대한 값과 동일한 $numberDecimal
$numberInt - 부호 있는 32비트 정수 값 또는 숫자를 나타내는 문자열 숫자 NUMBER

숫자

$numberDouble에 대한 값과 동일한 $numberInt
$numberLong - JSON 숫자 값 또는 숫자를 나타내는 문자열 숫자 NUMBER

숫자

$numberDouble에 대한 값과 동일한 $numberLong

다음 중 하나의 값을 가진 $binary:

  • base-64 문자의 문자열
  • 각각 base-64 문자와 숫자 0(임의 이진) 또는 4(UUID)로 구성된 문자열 값이 포함된 base64subType 필드가 있는 객체입니다.

값이 base-64 문자의 문자열인 경우 확장 객체에는 값이 0 또는 4인 필드 $subtype(1바이트 정수(0-255) 또는 2자의 16진수 문자열로 표현됨)이 포함될 수도 있습니다. 이러한 정수를 나타냅니다.

바이너리 BLOB 또는 RAW

string

변환은 SQL 함수 rawtohex의 사용과 동일합니다.

다음 중 하나를 수행합니다.
  • 값이 base-64 문자 문자열인 $binary
  • 입력의 subType 값이 4(UUID)인 경우 값이 32개의 16진수 문자인 $rawid
$oid - 24개의 16진수 문자열 바이너리 RAW(12)

string

변환은 SQL 함수 rawtohex의 사용과 동일합니다.

$rawid - 24개의 16진수 문자열
$rawhex - 짝수 16진수 문자가 포함된 문자열 값 바이너리 RAW

string

변환은 SQL 함수 rawtohex의 사용과 동일합니다.

값이 base-64 문자 문자열이고 = 문자가 오른쪽으로 채워진 $binary
값이 24 또는 32자의 16진수 문자열인 $rawid 바이너리 RAW

string

변환은 SQL 함수 rawtohex의 사용과 동일합니다.

$rawid
$oracleDate - ISO 8601 날짜 문자열 값 포함 날짜 DATE

string

$oracleDate - ISO 8601 날짜 문자열 값 포함
값이 ISO 8601 시간 기록 문자열인 $oracleTimestamp 시간기록 TIMESTAMP

string

값이 ISO 8601 시간 기록 문자열인 $oracleTimestamp
숫자 시간대 오프셋이 포함되거나 Z가 포함된 ISO 8601 시간 기록 문자열 값을 포함하는 $oracleTimestampTZ 시간대가 포함된 시간기록 TIMESTAMP WITH TIME ZONE

string

숫자 시간대 오프셋이 포함되거나 Z가 포함된 ISO 8601 시간 기록 문자열 값을 포함하는 $oracleTimestampTZ

$date - 다음 값 중 하나:

  • 1990년 1월 1일 이후의 정수 밀리초 수
  • ISO 8601 시간 기록 문자열
  • 1990년 1월 1일 이후 정수 밀리초 수 값을 가진 numberLong 필드가 있는 객체
시간대가 포함된 시간기록 TIMESTAMP WITH TIME ZONE

string

숫자 시간대 오프셋이 포함되거나 Z가 포함된 ISO 8601 시간 기록 문자열 값을 포함하는 $oracleTimestampTZ
SQL 함수 to_dsinterval에 대해 지정된 ISO 8601 간격 문자열 값을 포함하는 $intervalDaySecond daysecondInterval INTERVAL DAY TO SECOND

string

SQL 함수 to_dsinterval에 대해 지정된 ISO 8601 간격 문자열 값을 포함하는 $intervalDaySecond
SQL 함수 to_yminterval에 대해 지정된 ISO 8601 간격 문자열 값을 포함하는 $intervalYearMonth yearmonthInterval INTERVAL YEAR TO MONTH

string

SQL 함수 to_yminterval에 대해 지정된 ISO 8601 간격 문자열 값을 포함하는 $intervalYearMonth

필드 2개:

  • 숫자 또는 문자열 "Nan", "Inf""-Inf"(숫자가 아닌 값과 무한한 값을 나타냄)인 배열 값이 포함된 $vector 필드입니다.

  • 문자열 값이 "float32" 또는 "float64"인 필드 $vectorElementType입니다. 이는 각각 IEEE 32비트 및 IEEE 64비트 숫자에 해당합니다.

벡터 VECTOR

번호 배열

필드 2개:

  • 숫자 또는 문자열 "Nan", "Inf""-Inf"(숫자가 아닌 값과 무한한 값을 나타냄)인 배열 값이 포함된 $vector 필드입니다.

  • 문자열 값이 "float32" 또는 "float64"인 필드 $vectorElementType입니다.

각주 1 문자열 값은 대소문자를 구분 없이 해석됩니다. 예를 들어, "NAN" "nan""nAn"는 수락되고 이에 상응하며 "INF", "inFinity""iNf"와 유사합니다. 전체 단어 또는 약어로 무한히 큰("Infinity" 또는 "Inf") 및 작은("-Infinity" 또는 "-Inf") 숫자가 허용됩니다.

각주 2 출력에서 이러한 문자열 값만 사용됩니다. 전체 단어 Infinity 또는 문자-대소문자 변형은 사용되지 않습니다.