Kudu C++ client API
schema.h
1 //
2 // Licensed to the Apache Software Foundation (ASF) under one
3 // or more contributor license agreements. See the NOTICE file
4 // distributed with this work for additional information
5 // regarding copyright ownership. The ASF licenses this file
6 // to you under the Apache License, Version 2.0 (the
7 // "License"); you may not use this file except in compliance
8 // with the License. You may obtain a copy of the License at
9 //
10 // http://www.apache.org/licenses/LICENSE-2.0
11 //
12 // Unless required by applicable law or agreed to in writing,
13 // software distributed under the License is distributed on an
14 // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 // KIND, either express or implied. See the License for the
16 // specific language governing permissions and limitations
17 // under the License.
18 #ifndef KUDU_CLIENT_SCHEMA_H
19 #define KUDU_CLIENT_SCHEMA_H
20 
21 // NOTE: using stdint.h instead of cstdint because this file is supposed
22 // to be processed by a compiler lacking C++11 support.
23 #include <stdint.h>
24 
25 #include <cstddef>
26 #include <string>
27 #include <vector>
28 
29 #ifdef KUDU_HEADERS_NO_STUBS
30 #include <gtest/gtest_prod.h>
31 
32 #include "kudu/gutil/port.h"
33 #else
34 #include "kudu/client/stubs.h"
35 #endif
36 
37 #include "kudu/util/kudu_export.h"
38 #include "kudu/util/status.h"
39 
40 namespace kudu {
41 
42 class ColumnSchema;
43 class KuduPartialRow;
44 class Schema;
45 class Slice;
46 struct ColumnSchemaDelta;
47 
48 namespace tools {
49 class RemoteKsckCluster;
50 class ReplicaDumper;
51 }
52 
53 namespace client {
54 
55 namespace internal {
56 class GetTableSchemaRpc;
57 class LookupRpc;
58 class MetaCache;
59 class MetaCacheEntry;
60 class WriteRpc;
61 } // namespace internal
62 
63 class KuduSchema;
64 class KuduValue;
65 
67 class KUDU_EXPORT KuduColumnTypeAttributes {
68  public:
70 
76 
83  KuduColumnTypeAttributes(int8_t precision, int8_t scale);
84 
89  explicit KuduColumnTypeAttributes(uint16_t length);
90 
92 
95 
100 
103  void CopyFrom(const KuduColumnTypeAttributes& other);
105 
107  int8_t precision() const;
108 
110  int8_t scale() const;
111 
113  uint16_t length() const;
114 
115  private:
116  friend class KuduColumnSchema;
117  friend class KuduColumnSpec;
118  friend class KuduSchema;
119 
120  KuduColumnTypeAttributes(int8_t precision, int8_t scale, uint16_t length);
121 
122  class KUDU_NO_EXPORT Data;
123 
124  // Owned.
125  Data* data_;
126 };
127 
129 class KUDU_EXPORT KuduColumnStorageAttributes {
130  public:
133  AUTO_ENCODING = 0,
134  PLAIN_ENCODING = 1,
135  PREFIX_ENCODING = 2,
136  RLE = 4,
137  DICT_ENCODING = 5,
138  BIT_SHUFFLE = 6,
139 
142  GROUP_VARINT = 3
143  };
144 
147  DEFAULT_COMPRESSION = 0,
148  NO_COMPRESSION = 1,
149  SNAPPY = 2,
150  LZ4 = 3,
151  ZLIB = 4,
152  };
153 
154 
167  EncodingType encoding = AUTO_ENCODING,
168  CompressionType compression = DEFAULT_COMPRESSION,
169  int32_t block_size = 0)
170  ATTRIBUTE_DEPRECATED("this constructor will be private in a future release")
171  : encoding_(encoding),
172  compression_(compression),
173  block_size_(block_size) {
174  }
175 
177  const EncodingType encoding() const {
178  return encoding_;
179  }
180 
182  const CompressionType compression() const {
183  return compression_;
184  }
185 
187  std::string ToString() const;
188 
195  static Status StringToEncodingType(const std::string& encoding,
196  EncodingType* type);
197 
204  static Status StringToCompressionType(const std::string& compression,
205  CompressionType* type);
206 
207  private:
208  EncodingType encoding_;
209  CompressionType compression_;
210  int32_t block_size_;
211 };
212 
214 class KUDU_EXPORT KuduColumnSchema {
215  public:
217  enum DataType {
218  INT8 = 0,
219  INT16 = 1,
220  INT32 = 2,
221  INT64 = 3,
222  STRING = 4,
223  BOOL = 5,
224  FLOAT = 6,
225  DOUBLE = 7,
226  BINARY = 8,
227  UNIXTIME_MICROS = 9,
228  DECIMAL = 10,
229  VARCHAR = 11,
230  TIMESTAMP = UNIXTIME_MICROS,
231  DATE = 12
232  };
233 
237  static std::string DataTypeToString(DataType type);
238 
244  static Status StringToDataType(const std::string& type_str, DataType* type);
245 
251  ~KuduColumnSchema();
252 
259 
264  void CopyFrom(const KuduColumnSchema& other);
265 
273  bool Equals(const KuduColumnSchema& other) const
274  ATTRIBUTE_DEPRECATED("use operator==(const KuduColumnSchema&) instead");
275 
282  bool operator==(const KuduColumnSchema& rhs) const;
283 
290  bool operator!=(const KuduColumnSchema& rhs) const;
291 
298  const std::string& name() const;
299 
301  DataType type() const;
302 
304  bool is_nullable() const;
306 
308  KuduColumnTypeAttributes type_attributes() const;
309 
311  KuduColumnStorageAttributes storage_attributes() const;
312 
316  const std::string& comment() const;
317 
318  private:
319  friend class KuduColumnSpec;
320  friend class KuduSchema;
321  friend class KuduSchemaBuilder;
322  // KuduTableAlterer::Data needs to be a friend. Friending the parent class
323  // is transitive to nested classes. See https://s.apache.org/inner-class-friends
324  friend class KuduTableAlterer;
325 
326 #ifdef KUDU_HEADERS_NO_STUBS
327  FRIEND_TEST(KuduColumnSchemaTest, TestEquals);
328 #endif
329 
331 
332 #if defined(__clang__) || \
333  (defined(__GNUC__) && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100) >= 40600)
334 #pragma GCC diagnostic push
335 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
336 #endif
339  const std::string &name,
340  DataType type,
341  bool is_nullable = false,
342  const void* default_value = NULL, //NOLINT(modernize-use-nullptr)
343  const KuduColumnStorageAttributes& storage_attributes = KuduColumnStorageAttributes(),
344  const KuduColumnTypeAttributes& type_attributes = KuduColumnTypeAttributes(),
345  const std::string& comment = "");
346 #if defined(__clang__) || \
347  (defined(__GNUC__) && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100) >= 40600)
348 #pragma GCC diagnostic pop
349 #endif
350 
351  // Owned.
352  ColumnSchema* col_;
353 };
354 
363 class KUDU_EXPORT KuduColumnSpec {
364  public:
377 
384 
393 
413  KuduColumnSpec* BlockSize(int32_t block_size);
414 
416 
433  KuduColumnSpec* Precision(int8_t precision);
434 
450  KuduColumnSpec* Scale(int8_t scale);
452 
454 
468  KuduColumnSpec* Length(uint16_t length);
470 
472 
484 
491 
498 
508 
510 
519 
525  KuduColumnSpec* RenameTo(const std::string& new_name);
527 
533  KuduColumnSpec* Comment(const std::string& comment);
534 
535  private:
536  class KUDU_NO_EXPORT Data;
537 
538  friend class KuduSchemaBuilder;
539  friend class KuduTableAlterer;
540 
541  // This class should always be owned and deleted by one of its friends,
542  // not the user.
543  ~KuduColumnSpec();
544 
545  explicit KuduColumnSpec(const std::string& col_name);
546 
547  Status ToColumnSchema(KuduColumnSchema* col) const;
548 
549  Status ToColumnSchemaDelta(ColumnSchemaDelta* col_delta) const;
550 
551  Slice DefaultValueAsSlice() const;
552 
553  // Owned.
554  Data* data_;
555 };
556 
578 class KUDU_EXPORT KuduSchemaBuilder {
579  public:
582 
589  KuduColumnSpec* AddColumn(const std::string& name);
590 
598  KuduSchemaBuilder* SetPrimaryKey(const std::vector<std::string>& key_col_names);
599 
610 
611  private:
612  class KUDU_NO_EXPORT Data;
613 
614  // Owned.
615  Data* data_;
616 };
617 
619 class KUDU_EXPORT KuduSchema {
620  public:
621  KuduSchema();
622 
627  KuduSchema(const KuduSchema& other);
628  ~KuduSchema();
629 
632 
637 
640  void CopyFrom(const KuduSchema& other);
642 
652  Status Reset(const std::vector<KuduColumnSchema>& columns, int key_columns)
653  ATTRIBUTE_DEPRECATED("this method will be removed in a future release")
654  WARN_UNUSED_RESULT;
655 
664  bool Equals(const KuduSchema& other) const
665  ATTRIBUTE_DEPRECATED("use operator==(const KuduSchema&) instead");
666 
673  bool operator==(const KuduSchema& rhs) const;
674 
681  bool operator!=(const KuduSchema& rhs) const;
682 
686  KuduColumnSchema Column(size_t idx) const;
687 
693  bool HasColumn(const std::string& col_name, KuduColumnSchema* col_schema) const;
694 
696  size_t num_columns() const;
697 
706  void GetPrimaryKeyColumnIndexes(std::vector<int>* indexes) const;
707 
715  KuduPartialRow* NewRow() const;
716 
720  std::string ToString() const;
721 
723 
731  static KuduSchema FromSchema(const Schema& schema) KUDU_NO_EXPORT;
732 
740  static Schema ToSchema(const KuduSchema& kudu_schema) KUDU_NO_EXPORT;
741 
743 
744  private:
745  friend class ClientTest;
746  friend class KuduClient;
747  friend class KuduScanner;
748  friend class KuduScanToken;
749  friend class KuduScanTokenBuilder;
750  friend class KuduSchemaBuilder;
751  friend class KuduTable;
752  friend class KuduTableCreator;
753  friend class KuduWriteOperation;
754  friend class ScanConfiguration;
755  friend class internal::GetTableSchemaRpc;
756  friend class internal::LookupRpc;
757  friend class internal::MetaCache;
758  friend class internal::MetaCacheEntry;
759  friend class internal::WriteRpc;
760  friend class tools::RemoteKsckCluster;
761  friend class tools::ReplicaDumper;
762 
763  // For use by KuduSchema::FromSchema.
764  explicit KuduSchema(const Schema& schema);
765 #if __cplusplus >= 201103
766  explicit KuduSchema(Schema&& schema);
767 #endif
768 
769  // Private since we don't want users to rely on the first N columns
770  // being the keys.
771  size_t num_key_columns() const;
772 
773  // Owned.
774  Schema* schema_;
775 };
776 
777 } // namespace client
778 } // namespace kudu
779 #endif // KUDU_CLIENT_SCHEMA_H
kudu::client::KuduSchemaBuilder::SetPrimaryKey
KuduSchemaBuilder * SetPrimaryKey(const std::vector< std::string > &key_col_names)
kudu::client::KuduColumnTypeAttributes::precision
int8_t precision() const
kudu::client::KuduColumnTypeAttributes
Representation of column type attributes.
Definition: schema.h:67
kudu::client::KuduColumnSchema::DataType
DataType
Supported data types for columns.
Definition: schema.h:217
kudu::client::KuduColumnSpec::Type
KuduColumnSpec * Type(KuduColumnSchema::DataType type)
kudu::client::KuduColumnSchema::KuduColumnSchema
KuduColumnSchema(const KuduColumnSchema &other)
kudu::client::KuduColumnSpec::Scale
KuduColumnSpec * Scale(int8_t scale)
kudu::client::KuduColumnSpec::Nullable
KuduColumnSpec * Nullable()
kudu::client::KuduSchema::Reset
Status Reset(const std::vector< KuduColumnSchema > &columns, int key_columns) WARN_UNUSED_RESULT
kudu::client::KuduColumnSpec::Compression
KuduColumnSpec * Compression(KuduColumnStorageAttributes::CompressionType compression)
kudu::client::KuduColumnStorageAttributes::StringToCompressionType
static Status StringToCompressionType(const std::string &compression, CompressionType *type)
kudu::client::KuduScanner
This class is a representation of a single scan.
Definition: client.h:2593
kudu::client::KuduValue
A constant cell value with a specific type.
Definition: value.h:37
kudu::client::KuduColumnSchema::StringToDataType
static Status StringToDataType(const std::string &type_str, DataType *type)
KuduPartialRow
A row which may only contain values for a subset of the columns.
Definition: partial_row.h:72
kudu::client::KuduColumnSchema::DataTypeToString
static std::string DataTypeToString(DataType type)
kudu::client::KuduColumnStorageAttributes::EncodingType
EncodingType
Column encoding types.
Definition: schema.h:132
kudu::client::KuduSchemaBuilder::AddColumn
KuduColumnSpec * AddColumn(const std::string &name)
kudu::client::KuduTableCreator
A helper class to create a new table with the desired options.
Definition: client.h:1134
kudu::client::KuduColumnStorageAttributes::encoding
const EncodingType encoding() const
Definition: schema.h:177
kudu::client::KuduColumnSpec::NotNull
KuduColumnSpec * NotNull()
kudu::client::KuduSchema::CopyFrom
void CopyFrom(const KuduSchema &other)
kudu::client::KuduColumnSpec::Comment
KuduColumnSpec * Comment(const std::string &comment)
kudu::client::KuduColumnSpec
Builder API for specifying or altering a column within a table schema.
Definition: schema.h:363
kudu::client::KuduColumnTypeAttributes::KuduColumnTypeAttributes
KuduColumnTypeAttributes(const KuduColumnTypeAttributes &other)
kudu::client::KuduColumnStorageAttributes::KuduColumnStorageAttributes
KuduColumnStorageAttributes(EncodingType encoding=AUTO_ENCODING, CompressionType compression=DEFAULT_COMPRESSION, int32_t block_size=0) ATTRIBUTE_DEPRECATED("this const ructor will be private in a future release")
Definition: schema.h:166
kudu::client::KuduColumnTypeAttributes::operator=
KuduColumnTypeAttributes & operator=(const KuduColumnTypeAttributes &other)
kudu::client::KuduColumnTypeAttributes::CopyFrom
void CopyFrom(const KuduColumnTypeAttributes &other)
kudu::client::KuduColumnStorageAttributes
Representation of column storage attributes.
Definition: schema.h:129
kudu::client::KuduColumnSpec::PrimaryKey
KuduColumnSpec * PrimaryKey()
kudu::client::KuduScanTokenBuilder
Builds scan tokens for a table.
Definition: client.h:3150
kudu::client::KuduColumnTypeAttributes::KuduColumnTypeAttributes
KuduColumnTypeAttributes(int8_t precision, int8_t scale)
kudu::client::KuduWriteOperation
A single-row write operation to be sent to a Kudu table.
Definition: write_op.h:66
kudu::client::KuduColumnSpec::Encoding
KuduColumnSpec * Encoding(KuduColumnStorageAttributes::EncodingType encoding)
kudu::client::KuduSchema
A representation of a table's schema.
Definition: schema.h:619
kudu::client::KuduScanToken
A scan descriptor limited to a single physical contiguous location.
Definition: client.h:3089
kudu::Status
A representation of an operation's outcome.
Definition: status.h:165
kudu::client::KuduSchemaBuilder::Build
Status Build(KuduSchema *schema)
kudu::client::KuduColumnTypeAttributes::KuduColumnTypeAttributes
KuduColumnTypeAttributes(uint16_t length)
kudu::client::KuduTable
A representation of a table on a particular cluster.
Definition: client.h:1521
kudu::client::KuduColumnStorageAttributes::ToString
std::string ToString() const
kudu::client::KuduColumnSpec::Default
KuduColumnSpec * Default(KuduValue *value)
kudu::client::KuduColumnSpec::Length
KuduColumnSpec * Length(uint16_t length)
kudu::client::KuduColumnSpec::BlockSize
KuduColumnSpec * BlockSize(int32_t block_size)
kudu::client::KuduColumnTypeAttributes::scale
int8_t scale() const
kudu::client::KuduColumnSchema::CopyFrom
void CopyFrom(const KuduColumnSchema &other)
kudu::client::KuduColumnSchema::operator=
KuduColumnSchema & operator=(const KuduColumnSchema &other)
kudu::Slice
A wrapper around externally allocated data.
Definition: slice.h:51
kudu::client::KuduColumnSpec::Precision
KuduColumnSpec * Precision(int8_t precision)
kudu::client::KuduSchemaBuilder
Builder API for constructing a KuduSchema object.
Definition: schema.h:578
kudu::client::KuduSchema::KuduSchema
KuduSchema(const KuduSchema &other)
kudu::client::KuduColumnStorageAttributes::CompressionType
CompressionType
Column compression types.
Definition: schema.h:146
kudu::client::KuduColumnTypeAttributes::length
uint16_t length() const
kudu::client::KuduColumnSpec::RenameTo
KuduColumnSpec * RenameTo(const std::string &new_name)
kudu::client::KuduTableAlterer
Alters an existing table based on the provided steps.
Definition: client.h:1799
kudu::client::KuduColumnSpec::RemoveDefault
KuduColumnSpec * RemoveDefault()
kudu::client::KuduColumnSchema
Representation of the column schema.
Definition: schema.h:214
kudu::client::KuduColumnStorageAttributes::compression
const CompressionType compression() const
Definition: schema.h:182
status.h
kudu::client::KuduSchema::operator=
KuduSchema & operator=(const KuduSchema &other)
kudu::client::KuduColumnStorageAttributes::StringToEncodingType
static Status StringToEncodingType(const std::string &encoding, EncodingType *type)
kudu::client::KuduClient
A handle for a connection to a cluster.
Definition: client.h:662