code: def parse_resource_id(rid):
      
      if not rid:
          return {}
      match = _ARMID_RE.match(rid)
      if match:
          result = match.groupdict()
          children = _CHILDREN_RE.finditer(result['children'] or '')
          count = None
          for count, child in enumerate(children):
              result.update({
                  key + '_%d' % (count + 1): group for key, group in child.groupdict().items()})
          result['last_child_num'] = count + 1 if isinstance(count, int) else None
          result = _populate_alternate_kwargs(result)
      else:
          result = dict(name=rid)
      return {key: value for key, value in result.items() if value is not None}
docs: Parses a resource_id into its various parts.
  
      Returns a dictionary with a single key-value pair, 'name': rid, if invalid resource id.
  
      :param rid: The resource id being parsed
      :type rid: str
      :returns: A dictionary with with following key/value pairs (if found):
  
          - subscription:            Subscription id
          - resource_group:          Name of resource group
          - namespace:               Namespace for the resource provider (i.e. Microsoft.Compute)
          - type:                    Type of the root resource (i.e. virtualMachines)
          - name:                    Name of the root resource
          - child_namespace_{level}: Namespace for the child resoure of that level
          - child_type_{level}:      Type of the child resource of that level
          - child_name_{level}:      Name of the child resource of that level
          - last_child_num:          Level of the last child
          - resource_parent:         Computed parent in the following pattern: providers/{namespace}\
          /{parent}/{type}/{name}
          - resource_namespace:      Same as namespace. Note that this may be different than the \
          target resource's namespace.
          - resource_type:           Type of the target resource (not the parent)
          - resource_name:           Name of the target resource (not the parent)
  
      :rtype: dict[str,str]