hailong wang created FLINK-18003: ------------------------------------ Summary: Table hints support multi Options Key: FLINK-18003 URL: https://issues.apache.org/jira/browse/FLINK-18003 Project: Flink Issue Type: Improvement Components: Table SQL / Planner Affects Versions: 1.10.0 Reporter: hailong wang Fix For: 1.11.0
For now, if we write mutil options in table hint, only the first takes effect. For Example: {code:java} select * from t1/*+ OPTIONS(k5='v5', 'a.b.c'='fakeVal'), OPTIONS(k6='v6') */" {code} only k5='v5', 'a.b.c'='fakeVal' will be added to dynamic options. For in FlinkHints#getHintedOptions, we only find the first relHint. {code:java} public static Map<String, String> getHintedOptions(List<RelHint> tableHints) { return tableHints.stream().filter(hint -> hint.hintName.equalsIgnoreCase(HINT_NAME_OPTIONS)) .findFirst() .map(hint -> hint.kvOptions) .orElse(Collections.emptyMap()); }{code} So I think we can replace with: {code:java} public static Map<String, String> getHintedOptions(List<RelHint> tableHints) { return tableHints.stream().filter(hint -> hint.hintName.equalsIgnoreCase(HINT_NAME_OPTIONS)) .map(hint -> hint.kvOptions) .map(Map::entrySet) .flatMap(Set::stream) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); } {code} By this, k6='v2' will take effect. -- This message was sent by Atlassian Jira (v8.3.4#803005)