3
3
import com .alicloud .openservices .tablestore .AsyncClient ;
4
4
import com .alicloud .openservices .tablestore .ClientException ;
5
5
import com .alicloud .openservices .tablestore .model .*;
6
+ import com .alicloud .openservices .tablestore .model .filter .Filter ;
6
7
import com .alicloud .openservices .tablestore .timestream .internal .TableMetaGenerator ;
7
8
import com .alicloud .openservices .tablestore .timestream .internal .Utils ;
8
9
import com .alicloud .openservices .tablestore .timestream .model .*;
9
10
import com .alicloud .openservices .tablestore .timestream .model .TimeRange ;
10
- import com .alicloud .openservices .tablestore .timestream .model .filter .Filter ;
11
11
12
12
import java .util .ArrayList ;
13
13
import java .util .Arrays ;
@@ -20,6 +20,9 @@ public class DataQuery {
20
20
private List <String > columnToGet = new ArrayList <String >();
21
21
private TimeRange timeRange ;
22
22
private long timestamp = -1 ;
23
+ private boolean isDesc = false ;
24
+ private Filter filter ;
25
+ private int limit = -1 ;
23
26
24
27
public DataQuery (AsyncClient asyncClient , String tableName ) {
25
28
this .asyncClient = asyncClient ;
@@ -57,21 +60,38 @@ private PointIterator getTimestreamWithRange(TimestreamIdentifier identifier) {
57
60
end = timeRange .getEndTime ();
58
61
}
59
62
PrimaryKeyBuilder beginPk = Utils .convertIdentifierToPK (identifier );
60
- beginPk .addPrimaryKeyColumn (
61
- TableMetaGenerator .CN_TAMESTAMP_NAME ,
62
- PrimaryKeyValue .fromLong (start )
63
- );
64
-
65
63
PrimaryKeyBuilder endPk = Utils .convertIdentifierToPK (identifier );
66
- endPk .addPrimaryKeyColumn (
67
- TableMetaGenerator .CN_TAMESTAMP_NAME ,
68
- PrimaryKeyValue .fromLong (end )
69
- );
64
+ if (isDesc ) {
65
+ beginPk .addPrimaryKeyColumn (
66
+ TableMetaGenerator .CN_TAMESTAMP_NAME ,
67
+ PrimaryKeyValue .fromLong (end )
68
+ );
69
+ endPk .addPrimaryKeyColumn (
70
+ TableMetaGenerator .CN_TAMESTAMP_NAME ,
71
+ PrimaryKeyValue .fromLong (start )
72
+ );
73
+ rangeRowQueryCriteria .setDirection (Direction .BACKWARD );
74
+ } else {
75
+ beginPk .addPrimaryKeyColumn (
76
+ TableMetaGenerator .CN_TAMESTAMP_NAME ,
77
+ PrimaryKeyValue .fromLong (start )
78
+ );
79
+ endPk .addPrimaryKeyColumn (
80
+ TableMetaGenerator .CN_TAMESTAMP_NAME ,
81
+ PrimaryKeyValue .fromLong (end )
82
+ );
83
+ }
70
84
71
85
rangeRowQueryCriteria .setInclusiveStartPrimaryKey (beginPk .build ());
72
86
rangeRowQueryCriteria .setExclusiveEndPrimaryKey (endPk .build ());
73
87
rangeRowQueryCriteria .setMaxVersions (1 );
74
88
rangeRowQueryCriteria .addColumnsToGet (columnToGet );
89
+ if (filter != null ) {
90
+ rangeRowQueryCriteria .setFilter (filter );
91
+ }
92
+ if (limit > 0 ) {
93
+ rangeRowQueryCriteria .setLimit (limit );
94
+ }
75
95
GetRangeRequest request = new GetRangeRequest ();
76
96
request .setRangeRowQueryCriteria (rangeRowQueryCriteria );
77
97
@@ -88,6 +108,9 @@ private PointIterator getTimestreamWithTimestamp(TimestreamIdentifier identifie
88
108
singleRowQueryCriteria .setPrimaryKey (pkBuilder .build ());
89
109
singleRowQueryCriteria .setMaxVersions (1 );
90
110
singleRowQueryCriteria .addColumnsToGet (columnToGet );
111
+ if (filter != null ) {
112
+ singleRowQueryCriteria .setFilter (filter );
113
+ }
91
114
GetRowRequest request = new GetRowRequest (singleRowQueryCriteria );
92
115
return new PointIterator (new GetRowIterator (asyncClient , request ), identifier );
93
116
}
@@ -111,4 +134,54 @@ public TimeRange getTimeRange() {
111
134
public long getTimestamp () {
112
135
return timestamp ;
113
136
}
137
+
138
+ /**
139
+ * 设置按照数据的时间戳进行逆序排序
140
+ */
141
+ protected void setOrderByTimestampDesc () {
142
+ this .isDesc = true ;
143
+ }
144
+
145
+ /**
146
+ *
147
+ * @return 查询是否按照数据的时间戳进行逆序排序
148
+ */
149
+ public boolean isDescTimestamp () {
150
+ return this .isDesc ;
151
+ }
152
+
153
+ /**
154
+ * 数据查询的过滤条件
155
+ * @param filter 数据查询过滤条件
156
+ */
157
+ protected void setFilter (Filter filter ) {
158
+ this .filter = filter ;
159
+ }
160
+
161
+ /**
162
+ * 获取数据查询的过滤条件
163
+ * @return
164
+ */
165
+ public Filter getFilter () {
166
+ return this .filter ;
167
+ }
168
+
169
+ /**
170
+ * 设置查询时单次请求返回的行数
171
+ * @param limit
172
+ */
173
+ protected void setLimit (int limit ) {
174
+ if (limit <= 0 ) {
175
+ throw new ClientException ("The limit must be greater than 0." );
176
+ }
177
+ this .limit = limit ;
178
+ }
179
+
180
+ /**
181
+ * 获取查询时单次请求返回的行数
182
+ * @return
183
+ */
184
+ public int getLimit () {
185
+ return limit ;
186
+ }
114
187
}
0 commit comments