Adar Dembo has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/14306 )

Change subject: add a tool to create table
......................................................................


Patch Set 5:

(2 comments)

http://gerrit.cloudera.org:8080/#/c/14306/5/src/kudu/tools/tool_action_table.cc
File src/kudu/tools/tool_action_table.cc:

http://gerrit.cloudera.org:8080/#/c/14306/5/src/kudu/tools/tool_action_table.cc@937
PS5, Line 937:       ParseValueOfType(column.default_value(),
> I find there is a problem here. I can't use  ParseValueOfType derictly, the
Yeah this is frustrating; I didn't realize you'd need to _escape_ the JSON 
embedded inside the string values. That's super user-unfriendly.

How about this alternative: define a ValuePB oneof and populate it with every 
public Kudu data type. I suggested this in 
https://gerrit.cloudera.org/c/14273/5/src/kudu/tools/tool_action_table.cc#897 
but was worried that it would be difficult because there isn't a 1-1 mapping 
between Kudu and PB types. However, this isn't actually a problem, because I 
think you can define a oneof like this:

  message ValuePB {
    oneof value {
      string string_v;
      int32 int8_v;
      int32 int16_v;
      int32 int32_v;
      int64 int64_v;
      ...
    }
  }

Meaning, you could include several scalars in the oneof that all use the same 
type even though each has a different semantic meaning.

Then the remaining work is:
1. Validating that int8/int16/int32 aren't overflowed by whatever is in the 
int32 PB scalar.
2. Coming up with a suitable representation for DECIMAL. Probably something 
inside a string?

The JSON representation isn't great as users will need to know to set string_v 
vs. int8_v etc. But at least there's a clear mapping from JSON field to Kudu 
data type, and it's easier to use than escaped JSON. I think it's also better 
than a PB Any type 
(https://developers.google.com/protocol-buffers/docs/proto3#any) though you 
should explore that option too.


http://gerrit.cloudera.org:8080/#/c/14306/5/src/kudu/tools/tool_action_table.cc@970
PS5, Line 970:         for (const auto& value : 
bound.lower_bound().bound_values()) {
             :           values += value;
             :           values += ",";
             :         }
> I try to modify like this:
Right, because JoinKeysIterator() expects to operate on iterators belonging to 
a map. You'll need to use JoinStringsIterator or perhaps JoinElementsIterator.



--
To view, visit http://gerrit.cloudera.org:8080/14306
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: I0bce4733a504f8ef5f024089a16fe3c6f1e493f1
Gerrit-Change-Number: 14306
Gerrit-PatchSet: 5
Gerrit-Owner: YangSong <sy1...@yeah.net>
Gerrit-Reviewer: Adar Dembo <a...@cloudera.com>
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Reviewer: YangSong <sy1...@yeah.net>
Gerrit-Comment-Date: Tue, 01 Oct 2019 07:09:39 +0000
Gerrit-HasComments: Yes

Reply via email to