Query에서 Timestamp 함수 사용
시간 기록 및 기간 값에 대해 다양한 산술 연산을 수행할 수 있습니다.
예제와 함께 따라가려면 질의를 실행할 샘플 데이터를 참조하여 샘플 데이터를 보고 스크립트를 사용하여 테스트를 위해 샘플 데이터를 로드합니다. 스크립트는 예제에 사용된 테이블을 생성하고 데이터를 테이블로 로드합니다.
예제와 함께 따라가려면 쿼리를 실행할 샘플 데이터를 참조하여 샘플 데이터를 확인하고 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로 변환한 다음 시간 기록에서 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 구성 요소를 인출합니다.
출력:
{"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입니다. 열의 STRING 값이 ISO-8601 형식인 경우 SQL 런타임에 의해 자동으로 TIMESTAMP 데이터 유형으로 변환됩니다.
ISO8601은 날짜, 시간 및 기간을 나타내는 국제적으로 허용되는 방법을 설명합니다.
구문: 날짜와 시간: YYYY-MM-DDThh:mm:ss[.s[s[s[s[s[s[s]]][Z|(+|-)hh:mm]
설명
- YYYY는 연도를 소수점 네 자리로 지정합니다.
- MM은 월을 소수점 2자리 00-12로 지정합니다.
- DD는 요일을 소수점 2자리 00~31로 지정합니다.
- hh는 00~23의 소수점 두 자리 숫자로 시간을 지정합니다.
- mm은 분을 소수점 이하 2자리 00-59로 지정합니다.
- ss[.s[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 배열의 모든 레코드에 대해 백 도착 시간이 지금과 일주일 전 사이에 있는지 확인합니다. 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
설명:항공사 응용 프로그램에서 모든 고객은 소스와 대상 간에 다른 수의 홉/레그를 가질 수 있습니다. 이 질의에서는 모든 비행 구간 사이에 걸린 시간을 결정합니다. 이는 모든 항공편 구간에 대해 bagArrivalDate와 flightDate의 차이로 결정됩니다. 기간(일, 시간 또는 분)을 확인하려면 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);
query를 실행하려면 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 예제의 전체 코드를 다운로드하십시오.
//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 예제에서 전체 코드를 다운로드하십시오.
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);