RANK 함수 관련 내용입니다.

30 views
Skip to first unread message

topcl...@gmail.com

unread,
Aug 3, 2016, 3:27:04 AM8/3/16
to Apache Tajo 한국 사용자 그룹
안녕하세요? 오랜만에 다시 인사드립니다.

Tajo를 이용하여 개발 중인 Project의 Test 중에 의문점을 하나 발견하였는데요.

만약, External Table Column의 Type을 모두 Text로 설정하고, 다음의 쿼리를 수행하게 되면 ORDER BY가 ASC로만 정렬되는 현상이 있었습니다.

SELECT *, RANK() OVER (PARTITION BY COLUMN_1, COLUMN_2 ORDER BY COLUMN_3::INT8 DESC) RK FROM TABLE_A;

TEXT를 Type Casting하여 DESC를 사용했는데, 결과 값은 ASC를 한 것으로 나오게 되네요.

예상했던 결과와 달라 우선 임시적으로 Column의 Type을 INT8으로 처음부터 설정한 후에 쿼리를 수행하니 원하던 결과를 얻을 수 있었습니다.

큰 문제는 아니지만, 참고하시라는 뜻에서 올려봅니다.

여름 잘 보내세요 :)

topcl...@gmail.com

unread,
Aug 5, 2016, 5:42:27 AM8/5/16
to Apache Tajo 한국 사용자 그룹
안녕하세요. 질문이 하나 더 생겨서 답글을 남깁니다.

현재 서버 1대에 Hadoop과 Tajo를 설치하여 개발을 진행하고 있는데,

예전에 진호님께서 말씀하신 내용이, 여러개의 쿼리를 Tajo Client를 이용해 한번에 실행할 수 있다고 하셨는데요.

도저히 방법을 찾을 수 없어서 이렇게 질문을 남깁니다.

최현식 박사님께서 올려주신 Example을 참고하여 다음처럼 작성해 보았는데, 역시 순차적으로 쿼리를 실행합니다.

혹시 Worker가 여러개일 경우에만 (즉 Single Node가 아닌 경우) 쿼리 동시 실행이 가능한 것은 아닌가 싶어서 다시 질문을 드립니다.

제 생각으로는 Single Node 라도 Query를 여러개 Submit 할 수 있을 것 같은데, 제가 착각하고 있는 것인지요?

그럼 답변을 기다리고 있겠습니다.


public class TajoClientMain {
public void runQueries(String hostname, int port, String database, String[] sql_list)
throws ClientUnableToConnectException, UndefinedDatabaseException {
try (TajoClient client = new TajoClient(hostname, port)) {
client.selectDB(database);
for (int i = 0; i < sql_list.length; i++) {
String sql = sql_list[i].toString();
try {
client.executeQuery(sql);
} catch (QueryFailedException e) {
System.err.println("query is failed.");
} catch (QueryKilledException e) {
System.err.println("query is killed.");
} catch (TajoException e) {
e.printStackTrace();
}
}
}
}

2016년 8월 3일 수요일 오후 4시 27분 4초 UTC+9, topcl...@gmail.com 님의 말:

Jinho Kim

unread,
Aug 8, 2016, 1:44:25 AM8/8/16
to Apache Tajo 한국 사용자 그룹
안녕하세요.

노드 갯수와는 상관없고 리소스만 남는다면 동시에 실행됩니다.
설정 문제로 리소스가 작게 잡혔거나 사용하시는 장비의 리소스가 부족한게 아닌가 싶습니다. 
그리고 사용하시는 tajo 버전이 어떤건가요?


2016년 8월 5일 금요일 오후 6시 42분 27초 UTC+9, topcl...@gmail.com 님의 말:

topcl...@gmail.com

unread,
Aug 9, 2016, 5:46:58 AM8/9/16
to Apache Tajo 한국 사용자 그룹
안녕하세요.

답변 감사드립니다.

제가 원하는 것은 결과 데이터를 HDFS에 저장하는 것을 여러개 동시에 처리하고 싶은데, 잘 구현이 안되는 것 같습니다.

JAVA Client에서 Thread로 여러개를 요청할 때만 동시에 Query가 Submit 되고, 일반적인 Loop문으로 시도할 때는 그냥 순차적으로만 되네요.

예를 들면 이런 SQL 입니다.

INSERT OVERWRITE INTO

LOCATION <Result HDFS Path>

SELECT * FROM <Result Table>

WHERE A = Parameter_1

AND B = Parameter_2


사용하고 있는 Tajo 버전은 0.11.3 입니다.


사양은 CPU 24core, Memory 132GB, Physical Disk 1ea 입니다.


그리고 현재 설정은 


tajo-env.sh 


export TAJO_WORKER_HEAPSIZE=120000


tajo-site.xml


 <property>

  <name>tajo.task.resource.min.memory-mb</name>

  <value>5000</value>

  <description>Minimum allocatable memory per task</description>

</property>


<property>

  <name>tajo.worker.resource.disk.parallel-execution.num</name>

  <value>24</value>

</property>


이렇게만 설정해 둔 상태입니다. 혹시 제가 잘못 설정한 부분이 있을까요?


매번 감사합니다.


2016년 8월 8일 월요일 오후 2시 44분 25초 UTC+9, Jinho Kim 님의 말:

Jinho Kim

unread,
Aug 10, 2016, 9:51:49 AM8/10/16
to Apache Tajo 한국 사용자 그룹
안녕하세요. 

v2 client 에서는 executeQueryAsync 를 사용하셔야 blocking 이 안됩니다. 아래 예제가 있으니 참고하세요.

김진호 드림

2016년 8월 9일 화요일 오후 6시 46분 58초 UTC+9, topcl...@gmail.com 님의 말:
Reply all
Reply to author
Forward
0 new messages