query에 시간 기록 함수 사용

시간 기록 및 기간 값에 대해 다양한 산술 연산을 수행할 수 있습니다.

예제와 함께 따르려면 를 참조하여 샘플 데이터를 보고 스크립트를 사용하여 테스트할 샘플 데이터를 로드합니다. 스크립트는 예제에 사용된 테이블을 생성하고 테이블로 데이터를 로드합니다.

예제와 함께 따르려면 쿼리를 실행할 샘플 데이터를 참조하여 샘플 데이터를 보고 OCI 콘솔을 사용하여 예제 테이블을 생성하고 JSON 파일을 사용하여 데이터를 로드하는 방법을 알아봅니다.

추출 표현식

EXTRACT 표현식은 시간 기록에서 구성 요소를 추출합니다.
extract_expression ::= EXTRACT "(" id FROM expression ")"

FROM 키워드 뒤의 표현식은 최대 하나의 시간 기록 또는 NULL을 반환해야 합니다. 이 표현식의 결과가 NULL이거나 비어 있으면 EXTRACT의 결과도 NULL이거나 비어 있습니다. 그렇지 않으면 ID로 지정된 구성 요소가 반환됩니다. 이 ID는 YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND, NANOSECOND, WEEK, ISOWEEK 키워드 중 하나여야 합니다.

예 1: 티켓 번호가 1762383911861인 고객의 성명 및 수하물 도착 연도는 얼마입니까?
SELECT fullName, 
EXTRACT (YEAR FROM CAST (bag.bagInfo.bagArrivalDate AS Timestamp(0)))
AS YEAR FROM BaggageInfo bag 
WHERE ticketNo=1762383911861

설명: 먼저 CAST를 사용하여 bagArrivalDate를 TIMESTAMP로 변환한 다음 TIMESTAMP에서 YEAR 구성 요소를 인출합니다.

출력:
{"fullName":"Joanne Diaz","YEAR":2019}
예 2: 2019년 2월 오전 10시에서 오후 10시 사이에 MIA를 통과한 모든 가방을 검색합니다.
SELECT bag.bagInfo[].tagNum,bag.bagInfo[].flightLegs[].fltRouteSrc,
$t1 AS HOUR FROM BaggageInfo bag,
EXTRACT(HOUR FROM CAST (bag.bagInfo[0].bagArrivalDate AS Timestamp(0))) $t1,
EXTRACT(YEAR FROM CAST (bag.bagInfo[0].bagArrivalDate AS Timestamp(0))) $t2,
EXTRACT(MONTH FROM CAST (bag.bagInfo[0].bagArrivalDate AS Timestamp(0))) $t3
WHERE bag.bagInfo[].flightLegs[].fltRouteSrc=any "MIA" AND
$t2=2019 AND $t3=02 AND ($t1>10 AND $t1<20)

설명: 2019년 2월 오전 10시에서 오후 10시 사이에 MIA를 통해 이동한 항공편의 세부 정보를 알고 싶습니다. 여기서 여러 필터 조건을 사용합니다. 첫째, 비행은 MIA를 통해 시작되거나 통과되어야합니다. 도착 연도는 2019이고 도착 월은 2(2월)여야 합니다. 그런 다음 도착 시간이 오전 10:00에서 오후 10:00(20시간) 사이인지 필터링합니다.

출력:
{"tagNum":"17657806255240","fltRouteSrc":["MIA","LAX"],"HOUR":16}
{"tagNum":"17657806292518","fltRouteSrc":["MIA","LAX"],"HOUR":16}
예 3: 예약 코드 PQ1M8N의 승객이 수하물을 수령한 연도 및 월은 얼마입니까?
SELECT fullName, 
EXTRACT(YEAR FROM CAST (bag.bagInfo.bagArrivalDate AS Timestamp(0))) AS YEAR, 
EXTRACT(MONTH FROM CAST (bag.bagInfo.bagArrivalDate AS Timestamp(0))) AS MONTH 
FROM BaggageInfo bag WHERE bag.confNo="PQ1M8N"

설명: 먼저 CAST를 사용하여 bagArrivalDate를 TIMESTAMP로 변환한 다음 TIMESTAMP에서 YEAR 구성 요소 및 MONTH 구성 요소를 패치(fetch)합니다.

출력:
{"fullName":"Kendal Biddle","YEAR":2019,"MONTH":3}
예 4: 도착 월을 기준으로 수하물 데이터를 그룹화하고 해당 월에 도착한 수하물 수와 월을 표시합니다.
SELECT EXTRACT(MONTH FROM CAST ($bag_arr_date AS Timestamp(0))) AS MONTH,
count(EXTRACT(MONTH FROM CAST ($bag_arr_date AS Timestamp(0)))) AS COUNT
FROM BaggageInfo $bag, $bag.bagInfo[].bagArrivalDate $bag_arr_date 
GROUP BY EXTRACT(MONTH FROM CAST ($bag_arr_date AS Timestamp(0)))
설명: 수하물 도착 월을 기준으로 데이터를 그룹화하려고 합니다. 중첩되지 않은 배열을 사용하여 데이터를 평평하게 만듭니다. bagInfo 배열은 단순화되고 가방 도착 날짜 값이 배열에서 인출됩니다. 그런 다음 CAST를 사용하여 bagArrivalDate를 TIMESTAMP로 변환한 다음 TIMESTAMP에서 YEAR 구성 요소 및 MONTH 구성 요소를 패치(fetch)합니다. 그런 다음 count 함수를 사용하여 매월 해당하는 총 수하물을 가져옵니다.

주:

데이터의 한 가지 가정은 모든 수하물이 같은 해에 도착했다는 것입니다. 따라서 월을 기준으로만 데이터를 그룹화합니다.
출력:
{"MONTH":2,"COUNT":11}
{"MONTH":3,"COUNT":10}

timestamp_add() 함수

시간 기록 값에 기간을 추가하고 새 시간 기록을 반환합니다. 기간은 양수이거나 음수일 수 있습니다. 결과 유형은 TIMESTAMP(9)입니다.

구문:
TIMESTAMP(9) timestamp_add(TIMESTAMP timestamp, STRING duration)
의미:
  • TIMESTAMP: TIMESTAMP 값 또는 TIMESTAMP로 변환할 수 있는 값입니다.
  • duration: [-](<n> <UNIT>)+ 형식의 문자열입니다. 여기서 'n'은 숫자이고 <UNIT>은 YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, MILLISECOND, NANOSECOND 또는 이러한 키워드의 복수 형식(예: YEARS)일 수 있습니다.

    주:

    UNIT 키워드는 대소문자를 구분하지 않습니다.
  • returnvalue: TIMESTAMP(9)
예 1: 항공사 응용 프로그램에서 5분 지연 버퍼는 "정시"로 간주됩니다. 티켓 번호가 1762399766476인 승객에 대해 버퍼가 5분인 첫 번째 구간의 예상 도착 시간을 인쇄합니다.
SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, "5 minutes")
AS ARRIVAL_TIME FROM BaggageInfo bag 
WHERE ticketNo=1762399766476

설명: 항공사 애플리케이션에서 고객은 출발지 및 목적지에 따라 다리를 원하는 수만큼 사용할 수 있습니다. 위 질의에서 여행의 "첫 번째 구간"에 예상 도착을 인출하는 중입니다. 따라서 flightsLeg 배열의 첫번째 레코드가 인출되고 estimatedArrival 시간이 배열에서 인출되고 버퍼 "5분"이 여기에 추가되고 표시됩니다.

출력:
{"ARRIVAL_TIME":"2019-02-03T06:05:00.000000000Z"}

주:

estimatedArrival 열은 STRING입니다. 열에 ISO-8601 형식의 STRING 값이 있으면 SQL 런타임에 의해 TIMESTAMP 데이터 유형으로 자동으로 변환됩니다.

ISO8601에서는 날짜, 시간 및 기간을 나타내는 국제적으로 허용되는 방법을 설명합니다.

Syntax: Date with time: YYYY-MM-DDThh:mm:ss[.s[s[s[s[s[s]]]]][Z|(+|-)hh:mm]

설명
  • YYYY는 연도를 소수점 네 자리로 지정합니다.
  • MM은 월을 소수점 이하 2자리(00~12)로 지정합니다.
  • DD는 00~31의 소수점 두 자리 숫자로 일을 지정합니다.
  • hh는 00 ~ 23의 소수점 두 자리 숫자로 시를 지정합니다.
  • mm은 분을 소수점 이하 2자리(00~59)로 지정합니다.
  • ss[.s[s[s[s]]]]]는 초를 소수점 2자리(00~59자리)로 지정하며, 선택적으로 그 뒤에 소수점과 소수점 1~6자리(초의 소수 부분을 나타냄)가 옵니다.
  • Z는 UTC 시간(시간대 0)을 지정합니다. +00:00으로 지정할 수도 있지만 -00:00으로 지정할 수는 없습니다.
  • (+|-)hh:mm은 시간대를 UTC와의 차이로 지정합니다. + 또는 - 중 하나가 필요합니다.
예 1a: 티켓 번호가 1762399766476인 승객에 대해 버퍼가 5분인 모든 구간의 예상 도착 시간을 인쇄합니다.
SELECT $s.ticketno, $value as estimate, 
timestamp_add($value, '5 minute') AS add5min
FROM baggageinfo $s,
$s.bagInfo.flightLegs.estimatedArrival as $value
WHERE ticketNo=1762399766476

설명: 모든 구간에 estimatedArrival 시간을 표시하려고 합니다. 각 고객의 다리 수는 다를 수 있습니다. 따라서 변수 참조가 위 질의에 사용되며 baggageInfo 배열과 flightLegs 배열은 질의를 실행하기 위해 중첩되지 않습니다.

출력:
{"ticketno":1762399766476,"estimate":"2019-02-03T06:00:00Z",
"add5min":"2019-02-03T06:05:00.000000000Z"}
{"ticketno":1762399766476,"estimate":"2019-02-03T08:22:00Z",
"add5min":"2019-02-03T08:27:00.000000000Z"}
예 2: 지난 주에 몇 개의 가방이 도착했습니까?
SELECT count(*) AS COUNT_LASTWEEK FROM baggageInfo bag 
WHERE EXISTS bag.bagInfo[$element.bagArrivalDate < current_time()
AND $element.bagArrivalDate > timestamp_add(current_time(), "-7 days")]

설명: 지난 주에 항공사 응용 프로그램에서 처리한 가방 수가 표시됩니다. 고객은 가방을 두 개 이상 포함할 수 있습니다(bagInfo 배열은 레코드를 두 개 이상 포함할 수 있음). bagArrivalDate의 값은 오늘과 최근 7일 사이여야 합니다. bagInfo 배열의 모든 레코드에 대해 가방 도착 시간이 현재 시간에서 1주 전 시간 사이인지 확인합니다. current_time 함수는 지금 시간을 제공합니다. EXISTS 조건은 지난 주 가방에 도착 날짜가 있는지 확인하는 필터로 사용됩니다. count 함수는 이 기간의 총 가방 수를 결정합니다.

출력:
{"COUNT_LASTWEEK":0}
예 3: 다음 6시간 내에 도착하는 가방 수를 찾습니다.
SELECT count(*) AS COUNT_NEXT6HOURS FROM baggageInfo bag 
WHERE EXISTS bag.bagInfo[$element.bagArrivalDate > current_time()
AND $element.bagArrivalDate < timestamp_add(current_time(), "6 hours")]

설명: 향후 6시간 내에 항공사 응용 프로그램에서 처리할 가방 수를 확인할 수 있습니다. 고객은 가방을 하나 이상 포함할 수 있습니다(즉, bagInfo 배열은 레코드를 하나 이상 포함할 수 있음). bagArrivalDate는 현재 시간과 다음 6시간 사이여야 합니다. bagInfo 배열의 모든 레코드에 대해 가방 도착 시간이 지금부터 6시간 후 사이의 시간인지 확인합니다. current_time 함수는 지금 시간을 제공합니다. EXISTS 조건은 가방에 다음 6시간 내에 도착 날짜가 있는지 확인하는 필터로 사용됩니다. count 함수는 이 기간의 총 가방 수를 결정합니다.

출력:
{"COUNT_NEXT6HOURS":0}

timestamp_diff() 및 get_duration() 함수

timestamp_diff()

두 시간기록 값 사이의 시간(밀리초)을 반환합니다. 결과 유형은 LONG입니다.

구문:
LONG timestamp_diff(TIMESTAMP timestamp1, TIMESTAMP
      timestamp2)
의미:
  • timestamp1: TIMESTAMP 값 또는 TIMESTAMP로 변환할 수 있는 값
  • timestamp2: TIMESTAMP 값 또는 TIMESTAMP로 변환할 수 있는 값
  • returnvalue: LONG

get_duration()

주어진 시간(밀리초)을 기간 문자열로 변환합니다. 결과 유형은 STRING입니다.

구문:
STRING get_duration(LONG duration_millis)
의미:
  • duration_millis: 기간(밀리초)
  • returnvalue: STRING. 반환된 기간 문자열 형식은 [-](<n> <UNIT>)+이며, 여기서 <UNIT>는 DAY, HOUR, MINUTE, SECOND 및 MILLISECOND일 수 있습니다(예: "1일 2시간" 또는 "-10분 0초 500밀리초").

예를 들면 다음과 같습니다.

예 1: 티켓 번호가 1762355527825인 승객의 수하물이 한쪽 다리에 탑승하고 다음 다리에 도착한 시간 사이의 기간은 얼마입니까?
SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff
FROM baggageinfo $s, 
$s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg
WHERE ticketNo=1762355527825

설명: 항공사 응용 프로그램에서 모든 고객은 소스와 대상 간에 홉/다리를 다르게 가질 수 있습니다. 이 질의에서는 모든 비행 구간 사이에 걸린 시간을 결정합니다. 이는 모든 비행 구간에 대해 bagArrivalDateflightDate의 차이로 결정됩니다. 기간(일, 시간 또는 분)을 확인하려면 timestamp_diff 함수의 결과를 get_duration 함수에 전달합니다.

출력:
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T07:00:00Z",
"diff":"3 hours 17 minutes"}
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T07:23:00Z",
"diff":"2 hours 54 minutes"}
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T08:23:00Z",
"diff":"1 hour 54 minutes"}
기간(밀리초)을 확인하려면 timestamp_diff 함수만 사용하십시오.
SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate) AS diff
FROM baggageinfo $s, 
$s.bagInfo[] AS $bagInfo, 
$bagInfo.flightLegs[] AS $flightLeg
WHERE ticketNo=1762355527825
예 2: 체크인 시점부터 티켓 번호가 176234463813인 승객의 탑승 시점에 가방이 스캔되는 시간까지 얼마나 걸립니까?
SELECT $flightLeg.flightNo,
$flightLeg.actions[contains($element.actionCode, "Checkin")].actionTime AS checkinTime,
$flightLeg.actions[contains($element.actionCode, "BagTag Scan")].actionTime AS bagScanTime,
get_duration(timestamp_diff(
    $flightLeg.actions[contains($element.actionCode, "Checkin")].actionTime,
    $flightLeg.actions[contains($element.actionCode, "BagTag Scan")].actionTime
)) AS diff
FROM baggageinfo $s, 
$s.bagInfo[].flightLegs[] AS $flightLeg
WHERE ticketNo=176234463813 AND 
starts_with($s.bagInfo[].routing, $flightLeg.fltRouteSrc)

설명: 수하물 데이터에서 모든 flightLeg에 작업 배열이 있습니다. 작업 배열에는 세 가지 작업이 있습니다. 배열의 첫 번째 항목에 대한 작업 코드는 체크인/오프로드입니다. 첫 번째 다리의 경우 동작 코드는 체크 인이고 다른 다리의 경우 동작 코드는 홉에서 오프로드입니다. 배열의 두번째 요소에 대한 작업 코드는 BagTag Scan입니다. 위 질의에서 백 태그 스캔과 체크인 시간 간의 작업 시간 차이를 확인합니다. 작업 코드가 체크인 또는 BagScan인 경우에만 contains 함수를 사용하여 작업 시간을 필터링합니다. 첫 번째 항공편 구간에만 체크인 및 백 스캔 세부정보가 있으므로 starts_with 함수를 사용하여 데이터를 필터링하여 소스 코드 fltRouteSrc만 인출합니다. 기간(일, 시간 또는 분)을 확인하려면 timestamp_diff 함수의 결과를 get_duration 함수에 전달합니다.

기간(밀리초)을 확인하려면 timestamp_diff 함수만 사용하십시오.
SELECT $flightLeg.flightNo,
$flightLeg.actions[contains($element.actionCode, "Checkin")].actionTime AS checkinTime,
$flightLeg.actions[contains($element.actionCode, "BagTag Scan")].actionTime AS bagScanTime,
timestamp_diff(
   $flightLeg.actions[contains($element.actionCode, "Checkin")].actionTime,
   $flightLeg.actions[contains($element.actionCode, "BagTag Scan")].actionTime
) AS diff
FROM baggageinfo $s, 
$s.bagInfo[].flightLegs[] AS $flightLeg
WHERE ticketNo=176234463813 AND 
starts_with($s.bagInfo[].routing, $flightLeg.fltRouteSrc)
출력:
{"flightNo":"BM572","checkinTime":"2019-03-02T03:28:00Z",
"bagScanTime":"2019-03-02T04:52:00Z","diff":"- 1 hour 24 minutes"}
예 3: 티켓 번호가 1762320369957인 고객의 가방이 첫번째 전송 지점에 도달하는 데 얼마나 걸립니까?
SELECT  $bagInfo.flightLegs[1].actions[2].actionTime,
$bagInfo.flightLegs[0].actions[0].actionTime,
get_duration(timestamp_diff($bagInfo.flightLegs[1].actions[2].actionTime,
                            $bagInfo.flightLegs[0].actions[0].actionTime)) AS diff
FROM baggageinfo $s, $s.bagInfo[] AS $bagInfo     
WHERE ticketNo=1762320369957

설명: 항공사 응용 프로그램에서 모든 고객은 소스와 대상 간에 홉/다리를 다르게 가질 수 있습니다. 위 예제에서는 가방이 첫 번째 이동점에 도달하는 데 걸린 시간을 결정합니다. 수하물 데이터에서 flightLeg는 배열입니다. 배열의 첫번째 레코드는 첫번째 전송 지점 세부정보를 나타냅니다. 첫 번째 레코드의 flightDate는 가방이 소스를 떠나는 시간이고 첫 번째 비행 구간 레코드의 estimatedArrival는 첫 번째 이동 지점에 도달하는 시간을 나타냅니다. 두 가지의 차이는 가방이 첫 번째 이동점에 도달하는 데 걸리는 시간을 제공합니다. 기간(일, 시간 또는 분)을 확인하려면 timestamp_diff 함수의 결과를 get_duration 함수에 전달합니다.

기간(밀리초)을 확인하려면 timestamp_diff 함수를 사용합니다.
SELECT  $bagInfo.flightLegs[0].flightDate,
$bagInfo.flightLegs[0].estimatedArrival,
timestamp_diff($bagInfo.flightLegs[0].estimatedArrival,
             $bagInfo.flightLegs[0].flightDate) AS diff
FROM baggageinfo $s, $s.bagInfo[] AS $bagInfo
WHERE ticketNo=1762320369957
출력:
{"flightDate":"2019-03-12T03:00:00Z","estimatedArrival":"2019-03-12T16:00:00Z","diff":"13 hours"}
{"flightDate":"2019-03-12T03:00:00Z","estimatedArrival":"2019-03-12T16:40:00Z","diff":"13 hours 40 minutes"}

QueryRequest API 사용 예제

QueryRequest API 및 SQL 함수를 적용하여 NoSQL 테이블에서 데이터를 인출할 수 있습니다.

질의를 실행하려면 NoSQLHandle.query() API를 사용합니다.

SQLFunctions.java 예제에서 전체 코드 를 다운로드하십시오.
 //Fetch rows from the table
private static void fetchRows(NoSQLHandle handle,String sqlstmt) throws Exception {
   try (
      QueryRequest queryRequest = new QueryRequest().setStatement(sqlstmt);
      QueryIterableResult results = handle.queryIterable(queryRequest)){
      for (MapValue res : results) {
         System.out.println("\t" + res);
      }
   }
} 
String ts_func1="SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, \"5 minutes\")"+
                         " AS ARRIVAL_TIME FROM BaggageInfo bag WHERE ticketNo=1762341772625";
System.out.println("Using timestamp_add function ");
fetchRows(handle,ts_func1);
String ts_func2="SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate, "+
                "get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff "+
                 "FROM baggageinfo $s, $s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg "+
                 "WHERE ticketNo=1762344493810";
System.out.println("Using get_duration and timestamp_diff function ");
fetchRows(handle,ts_func2);

질의를 실행하려면 borneo.NoSQLHandle.query() 메소드를 사용합니다.

SQLFunctions.py 예제에서 전체 코드 를 다운로드하십시오.
# Fetch data from the table
def fetch_data(handle,sqlstmt):
   request = QueryRequest().set_statement(sqlstmt)
   print('Query results for: ' + sqlstmt)
   result = handle.query(request)
   for r in result.get_results():
      print('\t' + str(r))  
 ts_func1 = '''SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, "5 minutes")
                 AS ARRIVAL_TIME FROM BaggageInfo bag WHERE ticketNo=1762341772625'''
print('Using timestamp_add function:')
fetch_data(handle,ts_func1)

ts_func2 = '''SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
              get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff
              FROM baggageinfo $s,
              $s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg
              WHERE ticketNo=1762344493810'''
print('Using get_duration and timestamp_diff function:')
fetch_data(handle,ts_func2)

질의를 실행하려면 Client.Query 함수를 사용합니다.

SQLFunctions.go 예제에서 전체 코드 를 다운로드하십시오.
 //fetch data from the table
func fetchData(client *nosqldb.Client, err error, tableName string, querystmt string)(){
   prepReq := &nosqldb.PrepareRequest{
		Statement: querystmt,
   }
   prepRes, err := client.Prepare(prepReq)
   if err != nil {
      fmt.Printf("Prepare failed: %v\n", err)
      return
   }
   queryReq := &nosqldb.QueryRequest{
		 PreparedStatement: &prepRes.PreparedStatement,   }
   var results []*types.MapValue
   for {
      queryRes, err := client.Query(queryReq)
      if err != nil {
         fmt.Printf("Query failed: %v\n", err)
  	return
      }
      res, err := queryRes.GetResults()
      if err != nil {
         fmt.Printf("GetResults() failed: %v\n", err)
  	return
      }
      results = append(results, res...)
      if queryReq.IsDone() {
         break
      }
   }
   for i, r := range results {
      fmt.Printf("\t%d: %s\n", i+1, jsonutil.AsJSON(r.Map()))
   }
} 
ts_func1 := `SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, "5 minutes")
                AS ARRIVAL_TIME FROM BaggageInfo bag WHERE ticketNo=1762341772625`
fmt.Printf("Using timestamp_add function::\n")
fetchData(client, err,tableName,ts_func1)

ts_func2 := `SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
             get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff
             FROM baggageinfo $s,
             $s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg
             WHERE ticketNo=1762344493810`
fmt.Printf("Using get_duration and timestamp_diff function:\n")
fetchData(client, err,tableName,ts_func2)

질의를 실행하려면 query 메소드를 사용합니다.

JavaScript: SQLFunctions.js 예제에서 SQLFunctions.js 전체 코드를 다운로드합니다.
  //fetches data from the table
async function fetchData(handle,querystmt) {
   const opt = {};
   try {
      do {
         const result = await handle.query(querystmt, opt);
         for(let row of result.rows) {
            console.log('  %O', row);
         }
         opt.continuationKey = result.continuationKey;
      } while(opt.continuationKey);
   } catch(error) {
      console.error('  Error: ' + error.message);
   }
}
TypeScript: SQLFunctions.ts 예제에서 SQLFunctions.ts 전체 코드를 다운로드합니다.
interface StreamInt {
   acct_Id: Integer;
   profile_name: String;
   account_expiry: TIMESTAMP;
   acct_data: JSON;
}
/* fetches data from the table */
async function fetchData(handle: NoSQLClient,querystmt: string) {
   const opt = {};
   try {
      do {
         const result = await handle.query<StreamInt>(querystmt, opt);
         for(let row of result.rows) {
            console.log('  %O', row);
         }
         opt.continuationKey = result.continuationKey;
      } while(opt.continuationKey);
   } catch(error) {
      console.error('  Error: ' + error.message);
   }
}
const ts_func1 = `SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, "5 minutes")
                  AS ARRIVAL_TIME FROM BaggageInfo bag WHERE ticketNo=1762341772625`
console.log("Using timestamp_add function:");
await fetchData(handle,ts_func1);

const ts_func2 = `SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
                  get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff
                  FROM baggageinfo $s,
                  $s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg
                  WHERE ticketNo=1762344493810`
console.log("Using get_duration and timestamp_diff function:");
await fetchData(handle,ts_func2);

질의를 실행하려면 QueryAsync 메소드를 호출하거나 GetQueryAsyncEnumerable 메소드를 호출하고 결과 비동기 열거 가능을 반복할 수 있습니다.

SQLFunctions.cs 예제에서 전체 코드 를 다운로드하십시오.
private static async Task fetchData(NoSQLClient client,String querystmt){
   var queryEnumerable = client.GetQueryAsyncEnumerable(querystmt);
   await DoQuery(queryEnumerable);
}

private static async Task DoQuery(IAsyncEnumerable<QueryResult<RecordValue>> queryEnumerable){
   Console.WriteLine("  Query results:");
   await foreach (var result in queryEnumerable) {
      foreach (var row in result.Rows)
      {
         Console.WriteLine();
         Console.WriteLine(row.ToJsonString());
      }
   }
} 
private const string ts_func1 =@"SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, ""5 minutes"")
                                       AS ARRIVAL_TIME FROM BaggageInfo bag WHERE ticketNo=1762341772625";
Console.WriteLine("\nUsing timestamp_add function!");
await fetchData(client,ts_func1);

private const string ts_func2 =@"SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
                                       get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff
                                       FROM baggageinfo $s,
                                       $s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg
                                       WHERE ticketNo=1762344493810";
Console.WriteLine("\nUsing get_duration and timestamp_diff function!");
await fetchData(client,ts_func2);