[ 
https://issues.apache.org/jira/browse/FLINK-18437?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17147492#comment-17147492
 ] 

mzz commented on FLINK-18437:
-----------------------------

*I tried to read the source code,but it didn't help me。beacuse of the 
METRICS_OPERATOR_NAME_MAX_LENGTH is final*

{code:java}
        static final int METRICS_OPERATOR_NAME_MAX_LENGTH = 80;

public OperatorMetricGroup getOrAddOperator(OperatorID operatorID, String name) 
{
                if (name != null && name.length() > 
METRICS_OPERATOR_NAME_MAX_LENGTH) {
                        LOG.warn("The operator name {} exceeded the {} 
characters length limit and was truncated.", name, 
METRICS_OPERATOR_NAME_MAX_LENGTH);
                        name = name.substring(0, 
METRICS_OPERATOR_NAME_MAX_LENGTH);
                }
                OperatorMetricGroup operator = new 
OperatorMetricGroup(this.registry, this, operatorID, name);
                // unique OperatorIDs only exist in streaming, so we have to 
rely on the name for batch operators
                final String key = operatorID + name;

                synchronized (this) {
                        OperatorMetricGroup previous = operators.put(key, 
operator);
                        if (previous == null) {
                                // no operator group so far
                                return operator;
                        } else {
                                // already had an operator group. restore that 
one.
                                operators.put(key, previous);
                                return previous;
                        }
                }
        }
{code}


> org.apache.calcite.sql.validate.SqlValidatorException: List of column aliases 
> must have same degree as table
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: FLINK-18437
>                 URL: https://issues.apache.org/jira/browse/FLINK-18437
>             Project: Flink
>          Issue Type: Bug
>          Components: API / DataStream
>    Affects Versions: 1.9.3
>            Reporter: mzz
>            Priority: Critical
>
>  .withSchema(new Schema()
>         .field("ip", Types.STRING())
>         .field("ts", Types.STRING())
>         .field("environment", Types.ROW(Array("access", "brand"), 
> Array[TypeInformation[_]](Types.STRING(), Types.STRING)))
>         .field("advs", ObjectArrayTypeInfo.getInfoFor(new 
> Array[Row](0).getClass, Types.ROW(Array("count", "eventid"), 
> Array[TypeInformation[_]](Types.STRING(), Types.STRING))))
>       )
>       .inAppendMode()
>       .registerTableSource("aggs_test")
> The code above is dataSchema,i tried this way  
> [https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/table/sql/queries.html|http://example.com],but
>   when i execute this sql: 
> val sql1 =
>       """
>         |SELECT
>         |ip,
>         |ts,
>         |environment,
>         |adv
>         |FROM aggs_test
>         |CROSS JOIN UNNEST(advs) AS t (adv)
>         |""".stripMargin
> It report an error:
> Exception in thread "main" org.apache.flink.table.api.ValidationException: 
> SQL validation failed. From line 8, column 31 to line 8, column 33: List of 
> column aliases must have same degree as table; table has 2 columns ('access', 
> 'brand'), whereas alias list has 1 columns
>       at 
> org.apache.flink.table.calcite.FlinkPlannerImpl.validate(FlinkPlannerImpl.scala:128)
>       at 
> org.apache.flink.table.sqlexec.SqlToOperationConverter.convert(SqlToOperationConverter.java:83)
>       at 
> org.apache.flink.table.planner.StreamPlanner.parse(StreamPlanner.scala:115)
>       at 
> org.apache.flink.table.api.internal.TableEnvironmentImpl.sqlQuery(TableEnvironmentImpl.java:298)
>       at 
> QM.COM.Flink.KafakaHelper.FlinkTableConnKafka$.main(FlinkTableConnKafka.scala:88)
>       at 
> QM.COM.Flink.KafakaHelper.FlinkTableConnKafka.main(FlinkTableConnKafka.scala)
> Caused by: org.apache.calcite.runtime.CalciteContextException: From line 8, 
> column 31 to line 8, column 33: List of column aliases must have same degree 
> as table; table has 2 columns ('access', 'brand'), whereas alias list has 1 
> columns
>       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>       at 
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
>       at 
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>       at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
>       at 
> org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:463)
>       at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:824)
>       at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:809)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:4807)
>       at 
> org.apache.calcite.sql.validate.AliasNamespace.validateImpl(AliasNamespace.java:86)
>       at 
> org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:997)
>       at 
> org.apache.calcite.sql.validate.AbstractNamespace.getRowType(AbstractNamespace.java:115)
>       at 
> org.apache.calcite.sql.validate.AliasNamespace.getRowType(AliasNamespace.java:41)
>       at 
> org.apache.calcite.sql.validate.DelegatingScope.resolveInNamespace(DelegatingScope.java:101)
>       at org.apache.calcite.sql.validate.ListScope.resolve(ListScope.java:191)
>       at 
> org.apache.calcite.sql.validate.ListScope.findQualifyingTableNames(ListScope.java:156)
>       at 
> org.apache.calcite.sql.validate.DelegatingScope.fullyQualify(DelegatingScope.java:238)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.visit(SqlValidatorImpl.java:5699)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl$Expander.visit(SqlValidatorImpl.java:5684)
>       at org.apache.calcite.sql.SqlIdentifier.accept(SqlIdentifier.java:317)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.expand(SqlValidatorImpl.java:5291)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateUnnest(SqlValidatorImpl.java:3126)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3108)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3093)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateJoin(SqlValidatorImpl.java:3158)
>       at 
> org.apache.flink.table.calcite.FlinkCalciteSqlValidator.validateJoin(FlinkCalciteSqlValidator.scala:67)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3102)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3365)
>       at 
> org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60)
>       at 
> org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:997)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:957)
>       at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:216)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:932)
>       at 
> org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:639)
>       at 
> org.apache.flink.table.calcite.FlinkPlannerImpl.validate(FlinkPlannerImpl.scala:124)
>       ... 5 more
> Caused by: org.apache.calcite.sql.validate.SqlValidatorException: List of 
> column aliases must have same degree as table; table has 2 columns ('access', 
> 'brand'), whereas alias list has 1 columns
>       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>       at 
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
>       at 
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>       at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
>       at 
> org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:463)
>       at org.apache.calcite.runtime.Resources$ExInst.ex(Resources.java:572)



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to