Columns information is read by thin-client only after the first data request, so you need to read at least one row to get columns.
вт, 3 нояб. 2020 г. в 09:31, Ilya Kazakov <[email protected]>: > Hello, Shravya! It is very interesting! I am trying to reproduce your > case, and what I see. I can see column names in the thin client only after > query execution. > > For example: > > ClientConfiguration clientConfig = new > ClientConfiguration().setAddresses("127.0.0.1"); > try(IgniteClient thinClient = Ignition.startClient(clientConfig)){ > SqlFieldsQuery sql = new SqlFieldsQuery("SELECT * FROM T1"); > FieldsQueryCursor cursor = thinClient.query(sql); > cursor.getAll(); > int count = cursor.getColumnsCount(); > System.out.println(count); > List<String> columnNames = new ArrayList<>(); > for (int i = 0; i < count; i++) { > String columnName = cursor.getFieldName(i); > columnNames.add(columnName); > } > System.out.println("columnNames:::"+columnNames); > } > > > But if this is the correct behavior I do not know yet, I will try to find > out. > > -------------------------------- > Ilya Kazakov > > вт, 3 нояб. 2020 г. в 12:51, Shravya Nethula < > [email protected]>: > >> Hi, >> >> *For Ignite thick client, the column names for a given sql query are >> coming up as expected with the following code:* >> public class ClientNode { >> >> public static void main(String[] args) { >> IgniteConfiguration igniteCfg = new IgniteConfiguration(); >> igniteCfg.setClientMode(true); >> >> Ignite ignite = Ignition.start(igniteCfg); >> *IgniteCache foo **= ignite.getOrCreateCache("foo");* >> >> SqlFieldsQuery sql = new SqlFieldsQuery("SELECT * FROM person"); >> *FieldsQueryCursor cursor = foo.query(sql);* >> int count = cursor.getColumnsCount(); >> List<String> columnNames = new ArrayList<>(); >> >> for (int i = 0; i < count; i++) { >> String columnName = cursor.getFieldName(i); >> columnNames.add(columnName); >> } >> System.out.println("columnNames:::"+columnNames); >> >> } } >> *Output:* >> *columnNames:::[ID, NAME, LAST_NAME, AGE, CITY_ID, EMAIL_ID] >> * >> *On the other hand, for thin client, the column names are coming up as empty >> list.* >> The following is the code: >> public class ClientNode { >> >> public static void main(String[] args) { >> ClientConfiguration clientConfig = new ClientConfiguration(); >> cc.setUserName("username"); >> cc.setUserPassword("password"); >> >> *IgniteClient thinClient = Ignition.startClient(clientConfig);* >> >> SqlFieldsQuery sql = new SqlFieldsQuery("SELECT * FROM person"); >> *FieldsQueryCursor cursor = thinClient.query(sql);* >> int count = cursor.getColumnsCount(); >> List<String> columnNames = new ArrayList<>(); >> >> for (int i = 0; i < count; i++) { >> String columnName = cursor.getFieldName(i); >> columnNames.add(columnName); >> } >> System.out.println("columnNames:::"+columnNames); >> >> } } >> >> *Output:**columnNames:::[ ]* >> >> While using IgniteCache.query(SqlFieldsQuery), the column names are >> coming up. But while using IgniteClient.query(SqlFieldsQuery), the >> column names are not coming up. Are we missing any configurations? Is there >> something wrong in the code? And also is there anyway in which we can >> identify the datatype of columns given in the query! We are looking for >> the datatype of the columns in the query but not the datatype of columns in >> the table! >> >> Any help here will be much appreciated! >> Thanks in advance! >> >> >> >> Regards, >> >> Shravya Nethula, >> >> BigData Developer, >> >> >> Hyderabad. >> >>
